php怎样将二进制流存到文件中?

php怎样将二进制流存到文件中?,第1张

整形转化成 2二进制 可以用  base_convert:

$str = 0x8000

 

echo $str2 = base_convert($str, 16, 2)

echo '<br>'

echo base_convert($str2, 2, 16)

[code]

 

字符串 文件等 可以考虑用 pack 和 unpack 转化成二进制

 

[code=PHP]

$file1 = 'F:/46.gif'           //随便拷一个图片作为测试用

$file2 = 'F:/test.txt'         //生成的二进制流保存在这个文件里

$file3 = 'F:/47.gif'           //由二进制流还原成的文件

 

$size = filesize($file1)

 

echo '文件大小为:'.$size

echo "\n<br>转化为二进制 ..."

 

$content = file_get_contents($file1)

$content = bstr2bin($content)

 

 

$fp = fopen($file2, 'w')

fwrite($fp, $content)

fclose($fp)

 

$size2 = filesize($file2)

 

echo '转化成二进制后文件大小为:'.$size2

 

$content = bin2bstr($content)

 

$fp = fopen($file3, 'w')

fwrite($fp, $content)

fclose($fp)

 

 

function bin2bstr($input)

// Convert a binary expression (e.g., "100111") into a binary-string

{

  if (!is_string($input)) return null // Sanity check

 

  // Pack into a string

  $input = str_split($input, 4)

  $str = ''

  foreach ($input as $v)

  {

      $str .= base_convert($v, 2, 16)

  }

   

  $str =  pack('H*', $str)

   

  return $str

}

 

function bstr2bin($input)

// Binary representation of a binary-string

{

  if (!is_string($input)) return null // Sanity check

 

  // Unpack as a hexadecimal string

  $value = unpack('H*', $input)

   

  // Output binary representation

  $value = str_split($value[1], 1)

  $bin = ''

  foreach ($value as $v)

  {

      $b = str_pad(base_convert($v, 16, 2), 4, '0', STR_PAD_LEFT)

       

      $bin .= $b

  }

   

  return $bin

}

你要的内容太多了,只能简单的说下。fopen (PHP 3, PHP 4, PHP 5)fopen -- 打开文件或者 URL 说明resource fopen ( string filename, string mode [, bool use_include_path [, resource zcontext]] )fopen() 将 filename 指定的名字资源绑定到一个流上。如果 filename 是 "scheme://..." 的格式,则被当成一个 URL,PHP 将搜索协议处理器(也被称为封装协议)来处理此模式。如果该协议尚未注册封装协议,PHP 将发出一条消息来帮助检查脚本中潜在的问题并将 filename 当成一个普通的文件名继续执行下去。 如果 PHP 认为 filename 指定的是一个本地文件,将尝试在该文件上打开一个流。该文件必须是 PHP 可以访问的,因此需要确认文件访问权限允许该访问。如果激活了安全模式或者 open_basedir 则会应用进一步的限制。 如果 PHP 认为 filename 指定的是一个已注册的协议,而该协议被注册为一个网络 URL,PHP 将检查并确认 allow_url_fopen 已被激活。如果关闭了,PHP 将发出一个警告,而 fopen 的调用则失败。 注意: 所支持的协议列表见附录 N。某些协议(也被称为 wrappers)支持 context 和/或 php.ini 选项。参见相应的页面哪些选项可以被设定(例如 php.ini 中用于 http wrapper 的 user_agent 值)。 注意: 对 context 的支持是 PHP 5.0.0 添加的。有关 context 的说明见参考 CLX, Stream Functions。注意: 自 PHP 4.3.2 起,对所有区别二进制和文本模式的平台默认模式都被设为二进制模式。如果在升级后脚本碰到问题,尝试暂时使用 't' 标记,直到所有的脚本都照以下所说的改为更具移植性以后。 mode 参数指定了所要求到该流的访问类型。可以是以下: 表 1. fopen() 中 mode 的可能值列表mode说明'r'只读方式打开,将文件指针指向文件头。 'r+'读写方式打开,将文件指针指向文件头。 'w'写入方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。 'w+'读写方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。 'a'写入方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。 'a+'读写方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。 'x'创建并以写入方式打开,将文件指针指向文件头。如果文件已存在,则 fopen() 调用失败并返回 FALSE,并生成一条 E_WARNING 级别的错误信息。如果文件不存在则尝试创建之。这和给 底层的 open(2) 系统调用指定 O_EXCL|O_CREAT 标记是等价的。此选项被 PHP 4.3.2 以及以后的版本所支持,仅能用于本地文件。 'x+'创建并以读写方式打开,将文件指针指向文件头。如果文件已存在,则 fopen() 调用失败并返回 FALSE,并生成一条 E_WARNING 级别的错误信息。如果文件不存在则尝试创建之。这和给 底层的 open(2) 系统调用指定 O_EXCL|O_CREAT 标记是等价的。此选项被 PHP 4.3.2 以及以后的版本所支持,仅能用于本地文件。 注意: 不同的 *** 作系统家族具有不同的行结束习惯。当写入一个文本文件并想插入一个新行时,需要使用符合 *** 作系统的行结束符号。基于 Unix 的系统使用 \n 作为行结束字符,基于 Windows 的系统使用 \r\n 作为行结束字符,基于 Macintosh 的系统使用 \r 作为行结束字符。 如果写入文件时使用了错误的行结束符号,则其它应用程序打开这些文件时可能会表现得很怪异。 Windows 下提供了一个文本转换标记('t')可以透明地将 \n 转换为 \r\n。与此对应还可以使用 'b' 来强制使用二进制模式,这样就不会转换数据。要使用这些标记,要么用 'b' 或者用 't' 作为

如果帮助到您,请记得采纳为满意答案哈,谢谢!祝您生活愉快! vae.la


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/tougao/11443279.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-16
下一篇 2023-05-16

发表评论

登录后才能评论

评论列表(0条)

保存