导航:首页 > 编程语言 > php字节操作

php字节操作

发布时间:2024-12-08 07:06:43

1. 关于php 位运算符的问题

这个涉及到系统底层,WEB开发中几乎没用到,知道下有这个东西就好了。底层的东西解释总是简单不了的。
变量在内存中的存放都是二进制数字。整数在32位系统上是占用4字节,一个字节是8位,也就是32位,位运算就是位级的运算操作了。

$a << $b Shift left(左移) 将 $a 中的位向左移动 $b 次(每一次移动都表示“乘以 2”)。
假定变量 $a 的值是 3,$b 的值是 2。
那么 $a 在内存中的存放的格式是:
00000000 00000000 00000000 00000011
每执行一次左移,都将所有的位向左移动,右边补零,左边超过的舍弃。
所以 $a 左移 2 得到的是:
00000000 00000000 00000000 00011000
也就是 12。相当于 3 × 2 × 2 = 12。

$a >> $b Shift right(右移) 将 $a 中的位向右移动 $b 次(每一次移动都表示“除以 2”)。
假定变量 $a 的值是 24,$b 的值是 2。
那么 $a 在内存中的存放的格式是:
00000000 00000000 00000000 00011000
每执行一次右移,都将所有的位向由移动,右边超过的舍弃,左边空出的位补零。
所以 $a 右移 2 得到的是:
00000000 00000000 00000000 00000110
也就是 6。相当于 24 ÷ 2 ÷ 2 = 6。

位移运算是系统底层运算,运算的速度比乘除还要快很多,优化代码优化到极致的时候,可以将数换算成二的公倍数,然后进行位移计算。但在WEB开发中几乎没有任何必要,而且超过系统底层了,程序在的可移植性就会降低。

其他的位运算符也是差不多的。比如:
$a & $b And(按位与) 将把 $a 和 $b 中都为 1 的位设为 1。
假定变量 $a 的值是 5,$b 的值是 6。
$a:
00000000 00000000 00000000 00000101
$b:
00000000 00000000 00000000 00000110
$a & $b :
00000000 00000000 00000000 00000101
00000000 00000000 00000000 00000110
───────────────────────────
00000000 00000000 00000000 00000100
竖的看,上下都是 1 的得到 1 ,否则就是 0。
所以 $a & $b = 4。

~ $a Not(按位非) 将 $a 中为 0 的位设为 1,反之亦然。
~ $a:
00000000 00000000 00000000 00000101
───────────────────────────
11111111 11111111 11111111 11111010
如果 $a 是有符号整数,第一位是符号位,1表示负数,那么 ~ $a = -2147483642。
如果 $a 是无符号整数,第一位还是数据位,那么 ~ $a = 4294967290。

以下的就不详细介绍了:
$a | $b Or(按位或) 将把 $a 或者 $b 中为 1 的位设为 1。
$a ^ $b Xor(按位异或) 将把 $a 和 $b 中不同的位设为 1。

平常说的几位的系统,就是系统处理整数的时候,是多少个位同时计算的,上面的例子都是基于32位系统。因为移动时超过的位将被舍弃,如果是64位或12位的,位移的结果就可能不一样了,要将计算时位的数量调整下。

2. 修改PHP ini_set内存限制(只对写入的文件有效)

在进行PHP编程时,如果需要调整内存限制以适应特定任务或需求,可以对`memory_limit`配置进行修改。默认情况下,`memory_limit`的值可能限制了程序运行时可用的内存大小。对于只对写入文件的操作有效的情况,调整此配置有助于提升性能或处理大型文件。

首先,了解`memory_limit`配置的作用非常重要。它指定了脚本执行期间允许使用的最大内存(以字节为单位)。例如,`memory_limit`设置为512M表示脚本最多可以使用512MB的内存。

调整`memory_limit`的步骤如下:

1. 打开包含需要执行的代码的PHP文件。在这个例子中,文件路径是`core\class\io\io_dzz.php`。确保你有文件的编辑权限。

2. 查找`memory_limit`配置。通常,这种配置会在脚本的开始部分,或者在执行可能需要大量内存的函数或操作之前进行定义。调整代码以去除或修改`memory_limit`的设置。例如,你可以删除`@ini_set("memory_limit", "512M");`这一行,或者修改为`ini_set("memory_limit", "1G");`来设置为1GB的内存限制。

3. 保存文件并重新运行脚本。在执行过程中,你将注意到内存限制已经调整,这将对脚本执行过程中的内存使用产生影响。对于写入文件的操作,更大的内存限制可能允许你处理更大型或复杂的文件。

记住,调整`memory_limit`需要谨慎行事,因为它可能会对程序的性能和资源使用产生重大影响。确保在修改后测试脚本,以确保它仍然符合预期,并且没有产生任何错误或异常行为。

3. php如何将图片转成字节流

在php中,有文件上传,那么php服务器端可以接收到请求参数 $_FILES,在 $_FILES数组中读取到上传文件的form表单名,然后在读取的数组中可以获取上传文件的源文件,使用 fopen()函数就可以获取文件的字节流了。
具体来点代码看看吧:(假定上传文件的表单名为 “formname”)
if($_FILES && isset($_FILES["formname"])){
//获取上传的文件的属性数组
$_fileinfo = $_FILES["formname"];
//获取上传文件的原文件名
$_filename = $_fileinfo["name"];
//获取上传文件的大小
$_filesize = $_fileinfo["size"];
//获取上传文件的临时文件名(长文件名)
$_filesource = $_fileinfo["tmp_name"];
//以读写方式打开文件,并将资源绑定到一个流上
$_filestream = fopen($_filesource,"ab");
//实现上传文件,其实质是把临时文件移动到制定的保存文件的位置
$_newfilename = "../mypath/filename.exp"; //自定义文件名,包含路径,可以是相对路径
move_uploaded_file($_filesource, $_newfilename);
}

4. PHP如何将从二进制文件中读取的字节转换为数字

bindec函数可转换二进制数为十进制数

5. php怎么把字节转换MB

function sizecount($filesize) {
if($filesize >= 1073741824) {
$filesize = round($filesize / 1073741824 * 100) / 100 . ' gb';
} elseif($filesize >= 1048576) {
$filesize = round($filesize / 1048576 * 100) / 100 . ' mb';
} elseif($filesize >= 1024) {
$filesize = round($filesize / 1024 * 100) / 100 . ' kb';
} else {
$filesize = $filesize . ' bytes';
}
return $filesize;
}

//应用方法
$path='./111cn.net/a.gif';
echo sizecount(filesize($path));

阅读全文

与php字节操作相关的资料

热点内容
精品php源码 浏览:958
自己编写云服务器抢红包 浏览:201
java解压缩文件加密 浏览:886
dlink打印服务器默认地址 浏览:351
php休眠函数 浏览:371
金蝶如何打开服务器 浏览:764
e4a手游辅助源码 浏览:776
什么app可以实时直播 浏览:105
苹果13的app闪退什么原因 浏览:774
尾盘选股源码公式 浏览:449
php日期运算 浏览:930
天龙八部长歌服务器什么时候开的 浏览:198
鬼泣4模型在那个文件夹 浏览:228
单片机的串行口 浏览:57
phpjson转化为数组 浏览:267
pdf导入excel 浏览:427
苹果xsmax信任app在哪里设置 浏览:52
自动外链php源码 浏览:244
我的世界新手奖励箱命令 浏览:145
linux更新vim 浏览:997