【发布时间】:2017-04-07 14:05:42
【问题描述】:
我正在编写一个 PHP 脚本,我希望能够选择性地使用文件作为脚本输入。这样:
$ php script.php < file.txt
实际上,我可以使用 file_get_contents 做到这一点:
$data = file_get_contents('php://stdin');
但是,如果我没有将文件传递给输入,脚本会无限期挂起,等待输入。
我尝试了以下方法,但没有成功:
$data = '';
$in = fopen('php://stdin', 'r');
do {
$bytes = fread($in, 4096);
// Maybe the input will be empty here?! But no, it's not :(
if (empty($bytes)) {
break;
}
$data .= $bytes;
} while (!feof($in));
脚本等待fread 返回一个值,但它永远不会返回。我猜它会像 file_get_contents 一样等待一些输入。
另一个尝试是用while { ... } 替换do { ... } while 循环,在尝试读取输入之前检查EOF。但这也没有用。
关于如何实现这一目标的任何想法?
【问题讨论】:
-
@JustOnUnderMillions 也许我对 PHP 客户端的要求太多了,但是还有其他 非 PHP 命令行程序实现了这个逻辑——读取输入或忽略/退出。
-
是的,你是对的。我走错了车道。 @Alex Howansky 明白了。