我正在尝试使用PHP将文件假脱机到连接到服务器的打印机。
我在PHP中使用EXEC发送lp -d 'Brother_QL-570' '/Users/user_name/Documents/wwwroot/mmsprint/mmsUw8Vv9
之类的命令,并获得5
的返回值。该命令在终端窗口中正常工作。
如果我发送ls
,whoami
等,命令执行正常。
whoami
和ls
位于/ 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");
有什么想法?我错过了什么?这应该很容易。哎呀!!
答案 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个虚拟主机这一事实做点什么。