【发布时间】:2013-08-09 12:26:21
【问题描述】:
我一直在使用 PHP 在 Apache 服务器中执行旧脚本。旧脚本将调试数据写入 STDERR,我一直根据调试设置将其重定向到黑洞或 STDOUT。
PHP 看起来有点像这样:
exec('perl -e "print 10; print STDERR 20" 2>&1', $output);
在 XP 中可靠地工作。我得到了现在运行 windows7 的新硬件,回到这段代码它被破坏了。零输出。返回码 255。不知道为什么。
我能够让它再次运行的唯一方法是删除重定向。哦,重定向在终端盒中仍然可以正常工作。
现在我必须从 apache-error-log 中检索我的调试数据(默认情况下每个 STDERR 输出都在其中),这很不方便,但不是问题。
我只是想了解为什么重定向突然停止工作(也许可以帮助其他遇到同样问题的人)。 apache 是一样的,实际上我只是从旧盒子中复制了 XAMPP 目录。一个错误?系统限制?被操作系统政策禁止?
【问题讨论】:
-
您可能使用的是 Win XP 32 位,而现在使用的是 Win 7 64 位,这会导致编译为 32 位的 PHP 的某些 dll 发生冲突。重新安装整个 xampp 包,或者构建自己的下载 php 和 apache,但这次适合您的操作系统(如果是 64 位,请安装 64 位 PHP)
-
我不是 Windows 用户,但经过搜索,我发现 XP 文档中存在 stderr 重定向,但 Win7 缺少该重定向。也许它已被删除?
-
你的理论听起来很有道理。事实上,我之前使用的是 xp-32,现在使用的是 win7-54。我将不得不看看我是否可以升级 xampp 来测试你的理论。 - 我没有查看 win7 的文档,但我测试了整个命令,因为它应该在“dos-box”中执行,效果很好
-
似乎只有 PHP 5.5 可用于 64 位,而这些似乎是 Windows 的实验性版本 -> windows.php.net/download/#php-5.5 我需要使用旧版本的 PHP 才能与生产服务器兼容。
标签: php windows apache io-redirection