У меня есть скрипт PHP, который распаковывает архив, содержащий скрипты Python, в каталог, str_replaces некоторые вещи внутри скрипта, скрипт shell_exec, а затем отменивает скрипт.Как правильно запустить скрипт Python из PHP
У меня нет проблем с распаковкой архива или chmodding содержимого до 0755. Я могу выполнить сгенерированные скрипты через терминал, и они выполняют как ожидалось, но с PHP ничего не происходит!
Я попытался указать абсолютные пути для Python в моем shell_exec и в 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 не выводил файл. Остальную часть проекта можно найти по адресу https://github.com/zelon88/HRCloud2. – zelon88