为啥即使磁盘已满PHP仍返回0
Posted
技术标签:
【中文标题】为啥即使磁盘已满PHP仍返回0【英文标题】:Why does PHP return 0 even though the disk is full为什么即使磁盘已满PHP仍返回0 【发布时间】:2019-03-30 19:04:19 【问题描述】:我正在将 php 进程(cli 模式)的标准输出重定向到一个文件。
为什么磁盘已满时退出代码为 0。
我可以在 php 7.1/5.6/5.4 以及 macos 和 centos 中重新出现这个问题。
leojins-MacBook-Pro-2:Downloads leojin$ php test.php > /Volumes/disk_test/test.log
leojins-MacBook-Pro-2:Downloads leojin$ echo $?
0
leojins-MacBook-Pro-2:Downloads leojin$ df -h
Filesystem Size Used Avail Capacity iused ifree %iused Mounted on
/dev/disk1s1 233Gi 27Gi 205Gi 12% 580000 9223372036854195807 0% /
devfs 189Ki 189Ki 0Bi 100% 654 0 100% /dev
/dev/disk1s4 233Gi 1.0Gi 205Gi 1% 1 9223372036854775806 0% /private/var/vm
map -hosts 0Bi 0Bi 0Bi 100% 0 0 100% /net
map auto_home 0Bi 0Bi 0Bi 100% 0 0 100% /home
/dev/disk2s1 95Mi 93Mi 1.5Mi 99% 96 9223372036854775711 0% /Volumes/disk_test
以下是test.php
的内容:
<?php
$i = 0;
while (true)
echo "php:" . $i . "\n";
$i++;
当我使用 python 时,它按预期以 1 退出。
leojins-MacBook-Pro-2:Downloads leojin$ python test.py > /Volumes/disk_test/test.log
Traceback (most recent call last):
File "test.py", line 3, in <module>
print 'python:' + str(i)
IOError: [Errno 28] No space left on device
leojins-MacBook-Pro-2:Downloads leojin$ echo $?
1
以下是test.py
的内容:
i = 0
while True:
print 'python:' + str(i)
i = i + 1
我也试过php -d implicit_flush=0
和python -u
,没有区别。
【问题讨论】:
【参考方案1】:您的 PHP 代码不会写入磁盘,setting an exit status 也不会在您的代码中的任何位置。所以,它没有理由异常退出。如果你想检查磁盘是否已满,我建议你这样做in your shell或in PHP。
我不太熟悉它,但我猜你的 Python 解释器可能会抛出这个错误,因为代码在执行之前是 compiled to bytecode。如果没有空间,则无法执行此中间步骤。
【讨论】:
要确认这一点,只需禁用*.pyc
***.com/questions/154443/how-to-avoid-pyc-files的生成以上是关于为啥即使磁盘已满PHP仍返回0的主要内容,如果未能解决你的问题,请参考以下文章
itunes显示磁盘已满怎么办 itunes显示磁盘已满解决方法【详解】