Mac OS X下PHP执行LP命令失败


PHP exec using LP command fails on Mac OS X

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

我在PHP中使用EXEC发送一个命令,如lp -d 'Brother_QL-570' '/Users/user_name/Documents/wwwroot/mmsprint/mmsUw8Vv9,并获得5的返回值。该命令在终端窗口中运行良好。

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

whoamils位于/bin中,所以我为lp创建了一个符号链接,这没有什么区别。

也尝试了/usr/bin/lp,也没有工作。我在扯我剩下的头发。

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

一般情况下,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");

任何想法吗?我错过了什么?这应该很容易。啊! !

这是MAMP的一个问题。我在谷歌上搜索了"MAMP高管失败",得到了几个不错的答案。这是库的兼容性问题。我将DYLD_LIBRARY_PATH='' &&添加到命令中,Bob是我的叔叔。谢谢你的回复。

命令的输出是什么?

很可能PHP用户(apache)没有权限打印东西。将该用户添加到lp组。(假设mac的工作方式与unix类似)

我发现了一个类似于使用DYLD_LIBRARY_PATH='' &&的解决方案。使用这个对我来说很有效,所以我试图找到一个比在我所有的代码中包含这个更永久的修复方法。我打开文件/Applications/MAMP/Library/bin/envvars并注释了以下两行:

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

重新启动apache后,这是工作的伟大!不知道为什么这发生在我身上。

可能需要做一些事情,因为我正在运行两个虚拟主机。