使用LP命令的PHP exec在Mac OS X上失败

时间:2011-12-01 14:18:15

标签: php macos osx-lion

我正在尝试使用PHP将文件假脱机到连接到服务器的打印机。

我在PHP中使用EXEC发送lp -d 'Brother_QL-570' '/Users/user_name/Documents/wwwroot/mmsprint/mmsUw8Vv9之类的命令,并获得5的返回值。该命令在终端窗口中正常工作。

如果我发送lswhoami等,命令执行正常。

whoamils位于/ bin中,因此我为lp创建了一个符号链接,但没有任何区别。

还尝试了/usr/bin/lp,但也没有用。我正拉着我留下的小头发。

安全模式已关闭。 PHP和我的终端环境之间的路径变量是相同的。 我在Lion上运行MAMP。

FWIW,命令cat /Users/user_name/Documents/wwwroot/mmsprint/mmswKJqYK | lp -d Brother_QL-570的返回值为133

这是我的代码:

$temp_file = tempnam("./", 'mms');
$pdf->Output($temp_file, "F");
$pdf->Close();
$cmd = "lp -d 'Brother_QL-570'  '".$temp_file."'";
exec($cmd,$output,$retval);
error_log("-----cmd=".$cmd."\n", 3, "printCard.log");
foreach ($output as $a) {
    error_log("-----output=".$a."\n", 3, "printCard.log");
}
error_log("-----retval=".$retval."\n", 3, "printCard.log");

有什么想法?我错过了什么?这应该很容易。哎呀!!

3 个答案:

答案 0 :(得分:1)

事实证明这是MAMP的一个问题。我用谷歌搜索“MAMP exec失败”并提出了几个好的答案。它与库的兼容性问题。我在命令中加了DYLD_LIBRARY_PATH='' &&而鲍勃是我的叔叔。谢谢你的回复。

答案 1 :(得分:0)

命令的输出是什么?

很可能PHP用户(可能是apache)没有打印内容的权限。将该用户添加到lp组。 (假设macs的工作方式类似于unix。)

答案 2 :(得分:0)

我找到了与使用DYLD_LIBRARY_PATH='' &&提到的类似的解决方案。使用这个对我有用,所以我试图找到一个更持久的修复,而不是在我的所有代码中包含它。我打开了文件/Applications/MAMP/Library/bin/envvars,并注释了以下两行:

DYLD_LIBRARY_PATH="/Applications/MAMP/Library/lib:$DYLD_LIBRARY_PATH"
export DYLD_LIBRARY_PATH

重新启动apache之后,这很棒!不知道为什么会发生这种情况。可能必须对我运行2个虚拟主机这一事实做点什么。