【发布时间】:2017-01-10 20:52:36
【问题描述】:
我有一个 PHP 脚本,它将包含 Python 脚本的存档解压缩到一个目录中,str_replace 脚本中的一些东西,shell_exec 的脚本,然后取消链接脚本。
我在解压存档或将内容更改为 0755 时没有问题。我可以通过终端执行生成的脚本,它们按预期执行,但使用 PHP 没有任何反应!
我尝试在我的 shell_exec 和 Python 文件中的 shebang 中为 Python 指定绝对路径,但无济于事。似乎没有语法错误或未满足的依赖关系。我已经在 chmod 0777 对所有受影响的目录进行了尝试,但也无济于事。相关代码部分如下...
if (in_array($oldExtension,$allowed)) {
list($Width, $Height) = getimagesize($CUD);
$EXFreshScript = $InstLoc.'/Applications/document-scanner-master.zip';
$EXTempScript = $InstLoc.'/DATA/'.$UserID.'/TEMPSCRIPTS';
mkdir($EXTempScript);
chmod($EXTempScript, 0777);
$ExtractScripts = shell_exec('unzip '.$EXFreshScript.' -d '.$EXTempScript);
chmod($EXTempScript.'/document-scanner', 0777);
$TempScript = $EXTempScript.'/document-scanner/scan.py';
chmod($EXTempScript.'/document-scanner', 0777);
$TempScriptGlob = glob($TempScript);
foreach ($TempScriptGlob as $TSG) {
chmod($TSG, 0777); }
chmod($EXTempScript.'/document-scanner/pyimagesearch', 0777);
$TempScript1 = $EXTempScript.'/document-scanner/pyimagesearch';
$TempScriptGlob = glob($TempScript1);
foreach ($TempScriptGlob as $TSG) {
chmod($TSG, 0777);
}
$OutputDoc = $InstLoc.'/DATA/'.$UserID.'/DOCSCANTEMP.jpg';
$Code = 'DOCSCANTEMP.jpg';
$newCode = $InstLoc.'/DATA/'.$UserID.'/DOCSCANTEMP.jpg';
$ScriptData = file_get_contents($TempScript);
$SwapCode = str_replace($Code, $newCode, $ScriptData);
$WriteCode = file_put_contents($TempScript, $SwapCode);
$txt = ('OP-Act: Modified the code of '.$TempScript.' with '.$Width.', '.$Height.' on '.$Time.'.');
$LogFile = file_put_contents($SesLogDir.'/'.$Date.'.txt', $txt.PHP_EOL , FILE_APPEND);
$txt = ('OP-Act: Executing! '.$TempScript.' on '.$Time.'.');
$LogFile = file_put_contents($SesLogDir.'/'.$Date.'.txt', $txt.PHP_EOL , FILE_APPEND);
chmod($TempScript, 0777);
shell_exec('python '.$TempScript.' -i '.$CTD);
$txt = ('OP-Act: Execute complete! '.$TempScript.' was executed on '.$Time.'.');
$LogFile = file_put_contents($SesLogDir.'/'.$Date.'.txt', $txt.PHP_EOL , FILE_APPEND);
}
如果有人有任何想法,我将不胜感激。这个来自的脚本超过 650 行,我的问题已经缩小到这个范围。谢谢!
【问题讨论】:
-
您是否尝试过 php 是否可以执行任何脚本?在某些服务器上,shell_exec 被禁用。 PHP 是否显示任何错误?
-
PHP 可以执行 shell_exec。我在脚本的其他地方证明了这一点,即使在这部分代码中,解压缩存档的 shell_exec 也可以正常工作。返回的唯一错误是我编程在 Python 脚本未输出文件时抛出的错误。该项目的其余部分可以在github.com/zelon88/HRCloud2找到。
标签: php python permissions shell-exec