所以。我有一个批处理文件。该批处理文件中是 PHP 代码。我遇到的"唯一"问题是"前导码"是在执行 PHP 时打印的。"@rem待命...">
示例批处理文件:
@rem Standby... <?php ob_start(); ?>
@echo off
echo Now in %comspec%
echo I am on %OS% with %NUMBER_OF_PROCESSORS% CPUs
echo Now handing off to PHP...
php.exe -f "%~f0" -- %*
goto :eof
<?php ob_clean(); ob_end_flush();
print "Now in PHP ".PHP_VERSION.PHP_EOL;
print "All done!";
输出如下内容:
Now in C:WINDOWSsystem32cmd.exe I am on Windows_NT with 4 CPUs Now handing off to PHP... @rem Standby... Now in PHP 7.1.0 All done!
我知道这是因为 PHP 解析器的性质,它考虑了应该显示的标签内联内容之外的任何内容。此脚本可以在我不能依赖 PHP 配置的环境中使用。
如何让 PHP 丢弃该内联内容?(不编辑配置(
PHP 7.1 on Win10
您只需要确保在配置级别打开输出缓冲,然后就不需要调用ob_start()
。通过命令行参数通用地执行此操作非常简单。例:
@echo off
echo Now in %comspec%
echo I am on %OS% with %NUMBER_OF_PROCESSORS% CPUs
echo Now handing off to PHP...
php.exe -d output_buffering=On -f "%~f0" -- %*
goto :eof
<?php ob_clean(); ob_end_flush();
print "Now in PHP ".PHP_VERSION.PHP_EOL;
print "All done!";
收益 率:
Now in C:WINDOWSsystem32cmd.exe I am on Windows_NT with 4 CPUs Now handing off to PHP... Now in PHP 7.0.4 All done!