我正在使用system()
PHP 中的函数来调用我需要使用的 CLI 程序,该程序当前在 PHP 中不可用(下面的代码)。我正在使用 xml2brl (liblouisxml) CLI 生成包含盲文 ASCII 文本的输出文件。使用下面的代码,成功创建了两个文件,第一个文件成功写入了输入文本;但是,输出文件(第二个文件)永远不会将翻译后的文本写入其中。
不过,这是奇怪的部分。使用传递给的相同命令system()
和我在 PHP 中创建的相同临时文件,我可以在终端中以我的用户身份成功运行该命令。这个问题可能是由什么引起的?当我通过 运行whoami
命令时system()
,我得到了我的用户,并且临时文件或 CLI 命令都不需要特殊权限xml2brl
。
目前,我正在 PHP 中创建两个临时文件:
//Create the temporary files that will be passed to xml2brl
$_standardText = tempnam("~/tmp", "pll_");
$_translatedText = tempnam("~/tmp", "pll_");
临时文件存储在 /private/tmp 中,并带有pll_
前缀,以标识 PHP 脚本正在创建的文件。
然后,我将传递的文本的内容写入临时文件,如下所示:
//Write the contents of the passed text to the temp file
$handle = fopen($_standardText, "w");
fwrite($handle, $text);
fclose($handle);
现在,位于其中的临时文件中/private/tmp/xxxx
写入了文本(验证了这一点),然后我继续格式化命令:
$command = escapeshellcmd("xml2brl -p" . " " . $_standardText . " " . $_translatedText);
回显 $command 变量时,它的格式如下:
xml2brl -p /private/tmp/pll_MYRy9m /private/tmp/pll_DmiK7E
继续运行 exec 命令,它应该处理输入文件并将翻译后的文本写入输出文件,但它没有:
exec($command);
ls
现在,这是奇怪的部分……当我尝试只做一个使用 Apache,但无论何时运行此命令,它都不起作用。但是,当我不删除临时文件并xml2brl -p /private/tmp/pll_MYRy9m /private/tmp/pll_DmiK7E
在 CLI 中使用相同的 PHP 创建的命令 ( ) 和临时文件时,我可以在我的用户下运行它们。