Есть php скрипт, вот кусок кода из него
$uploaddir = "/tmp/";
$updatedir = "/home/andy/test/";
$update_script_path = "/home/andy/updater.sh";
$uploadfile = $uploaddir.basename($_FILES['arch']['name']);
$uploadfile = str_replace(' ', '', $uploadfile);
if ($_FILES['arch']['tmp_name'] != "" && copy($_FILES['arch']['tmp_name'], $uploadfile)) {
$update_script_path = escapeshellarg($update_script_path);
$uploadfile = escapeshellarg($uploadfile);
$updatedir = escapeshellarg($updatedir);
$commandline = $update_script_path." ".$uploadfile." ".$updatedir;
//echo "<pre>" . ($res = system($commandline)) . "</pre>";
echo "<pre>" . ($res = shell_exec($commandline)) . "</pre>";
//echo "<pre>" . ($res = exec($commandline)) . "</pre>";
//echo "<pre>" . ($res = system("/bin/sh -c /home/andy/updater.sh")) . "</pre>";
}
Пусть не смущают закоментированные строки запуска, это я просто пробовал различные варианты. Есть простой bash скрипт, права на его выполнение установлены
#!/bin/sh
tar -xvf $1 -C $2
Т.е. php скрипт принимает файл от пользователя, формирует командную строку для запуска bash скрипта. Проблема в том, что bash скрипт не отрабатывает, в bash скрипт оба аргумента передаются корректно, я проверял это выводя из bash скрипта
echo $1
echo $2
bash скрипт должен распаковать файл который пользователь передал через форму в заданную директорию, однако ничего не происходит. Если я из консоли вызываю свой bash скрипт "вручную"
root@test-device:/home/andy # ./updater.sh /tmp/files.tar.gz /home/andy/test/
То все отлично отрабатывает, я как видите из кода php скрипта игрался с различными вариантами, но успеха не получил (((
У Вас вероятно проблема с недостаточными правами доступа у пользователя, из под которого у вас запущен http-сервер и который обрабатывает запрос к указанному скрипту.
Проверьте и добавьте права:
/home/andy/test
- на запись/home/andy/updater.sh
- на выполнениеВиртуальный выделенный сервер (VDS) становится отличным выбором
Есть код для подключения стилей и скриптов из header в footer для оптимизации
Как можно узнать способы оплаты для клиентов, в определенном городе,как здесь