我有一个PHP脚本,它将包含Python脚本的存档解压缩到一个目录中,str_replaces脚本中的一些内容,shell_exec是脚本,然后取消链接脚本。
解压缩存档或将内容chmodding到0755没有问题。我可以通过终端执行生成的脚本,它们按预期执行,但是没有任何反应!
我已经尝试在我的shell_exec中指定Python的绝对路径,并在Python文件中指定shebang无效。似乎没有语法错误或未满足的依赖项。我在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行,我的问题缩小到了这个范围。谢谢!
答案 0 :(得分:0)
我将专注于这一行:
shell_exec('python '.$TempScript.' -i '.$CTD);
$CTD
。-i
标志,因为它会强制执行python提示。exec()
代替更好的调试。如果它不能帮到你,请告诉我它输出的内容。
$return = NULL;
$output = [];
exec('python '.$TempScript, $output, $return);
var_dump($return);
var_dump($output);