php или apache? exec, popen, system и proc_open не выполняют какую-либо команду, даже не ls

Моя проблема заключается в выполнении любой команды с моей домашней страницы php

Половина решена, я запустил мой pythonscript, но дальше на pythonscript нет разрешения на выполнение своих модулей

но я начинаю думать, что проблема связана с apache, а не с php? я попытался запустить pythonscript, который на самом деле является тем, что я буду запускать в конце, тогда он, кажется, запускается, но останавливается, когда скрипт пытается получить доступ к txt-файлу, похожим на этот

[stdout] => [stderr] => Traceback (most recent call last): File "pythontest.py", line 4, in ? f = open("(path)/temp.txt", "w") IOError: [Errno 13] Permission denied: '(path)/temp.txt' 

Я пробовал всевозможные методы выполнения, которые могли бы найти exec, system, popen, proc_open почти ничего не запускает, я могу получить строку из системы («pwd»), но система («ls») возвращает число 127 или 126. Я также попытался запустить скомпилированную программу c (код ниже) exec вернет объект «Массив», но система вернет только 127 или 126, как это делает ls.

Также я попытался получить значения из объекта «Массив»? от exec, но он ничего не возвращает, если я php print_R Array, страница не будет загружена.

php-выход (код ниже) -> a:, out1: 126, t [[0]:, strlen out: 5, out: Array, t: независимо от того, сколько аргументов я фактически положил!

полный путь к ls дает 126, а просто «ls» дает число 127

я протестировал на chmod все файлы до полного разрешения, с page.php, чтобы протестировать программу, но все равно дает тот же результат

Безопасный режим php отключен

 echo '<pre>'; print_r(execute('ls')) echo '</pre>'; 

возвращается

 array ( [stdout] => [stderr] => sh: /var/www/html/grndb/upscgenesearch/test1: Permission denied [return] => 126 ) 

почему это дает мне разрешение на отказ, когда у программы test1 есть полное разрешение?

 <?php $a = system("/bin/ls",$out1); echo "a: "; echo $a; echo ", out1: "; echo $out1; $t = exec('pwd/test1 aa hh 11',$out); foreach ($t as &$value) { echo ($value); } echo ", t[[0]: "; echo $t[0]; echo ", strlen out: "; echo strlen($out); echo ", out: "; echo $out; echo ", t: "; echo $t; ?> 

Исходный код C

 int main(int argc, char *argv[]) { int i; for(i = 0; i < argc; i++) printf("arg %d: %s\n", i, argv[i]); return 0; } 

Вот еще некоторые функции, которые нужно добавить в список 🙂

 /** * Executes a program and waits for it to finish, taking pipes into account. * @param string $cmd Command line to execute, including any arguments. * @param string $input Data for standard input. * @return array Array of "stdout", "stderr" and "return". * @copyright 2011 K2F Framework / Covac Software */ function execute($cmd,$stdin=null){ $proc=proc_open($cmd,array(0=>array('pipe','r'),1=>array('pipe','w'),2=>array('pipe','w')),$pipes); fwrite($pipes[0],$stdin); fclose($pipes[0]); $stdout=stream_get_contents($pipes[1]); fclose($pipes[1]); $stderr=stream_get_contents($pipes[2]); fclose($pipes[2]); $return=proc_close($proc); return array( 'stdout'=>$stdout, 'stderr'=>$stderr, 'return'=>$return ); } устройство /** * Executes a program and waits for it to finish, taking pipes into account. * @param string $cmd Command line to execute, including any arguments. * @param string $input Data for standard input. * @return array Array of "stdout", "stderr" and "return". * @copyright 2011 K2F Framework / Covac Software */ function execute($cmd,$stdin=null){ $proc=proc_open($cmd,array(0=>array('pipe','r'),1=>array('pipe','w'),2=>array('pipe','w')),$pipes); fwrite($pipes[0],$stdin); fclose($pipes[0]); $stdout=stream_get_contents($pipes[1]); fclose($pipes[1]); $stderr=stream_get_contents($pipes[2]); fclose($pipes[2]); $return=proc_close($proc); return array( 'stdout'=>$stdout, 'stderr'=>$stderr, 'return'=>$return ); } 

Пример использования для вашего случая:

 echo '<pre>'; print_r(execute('ls')); echo '</pre>'; 

Вышеупомянутая функция предлагает больше возможностей, чем напрямую с помощью PHP. Это может помочь вам при отладке, хотя оно больше предназначено для производственного кода.

В общем, это то, что вам следует знать:

  • Вы не находитесь в безопасном режиме
  • Ваш исполняемый файл существует
  • Ваш исполняемый файл запускается – знайте, что FTP-клиенты часто используют режим ASCII / Text, изменяя CRLF в загруженных файлах, тем самым разлагая их
  • Убедитесь, что chmod для вашего исполняемого файла не менее 755

Безопасный режим работает? Вы пытаетесь получить доступ к файлам за пределами safe_mode_exec_dir?

«Когда safe_mode включен, только исполняемые файлы, находящиеся в файле safe_mode_exec_dir, будут разрешены для выполнения через семейство функций exec».

Вы на своем собственном сервере или на общем хосте? Некоторые хосты отключат функционирование функций EXEC для целей безопасности.

Проблема заключается в разрешениях в каталоге. Каждый каталог, расположенный выше вашего пути, должен иметь как минимум разрешение на чтение. Таким образом, если вы хотите

 # ls /root/test_dir 

вы должны были

 # chmod 777 /root/test_dir # chmod 777 /root 

ПРИМЕЧАНИЕ: это плохая идея из безопасности POV. вместо этого, может быть:

 # mkdir /public # chmod 744 /public # mv /root/testdir /public 

обратите внимание, что здесь 744 будет применяться к test_dir

// Как сказал Немоден, использование (обратный тик):

 $cmd='ls /var/www/'; $variable_name=`$cmd`; 

Если вы не хотите хранить значение, используйте команду passthru. команда exec и system будет показывать только одну строку (данные после разрыва строки прерываются)