Проблема запуска внешнего bash скрипта из PHP

137
08 ноября 2019, 09:50

Есть 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 скрипта игрался с различными вариантами, но успеха не получил (((

Answer 1

У Вас вероятно проблема с недостаточными правами доступа у пользователя, из под которого у вас запущен http-сервер и который обрабатывает запрос к указанному скрипту.

Проверьте и добавьте права:

  • для папки /home/andy/test - на запись
  • для файла скрипта /home/andy/updater.sh - на выполнение
READ ALSO
Парсинг таблицы xml в sql [закрыт]

Парсинг таблицы xml в sql [закрыт]

Программа формирует xml файл, подобного формата

110
WP исключить стиль из футера

WP исключить стиль из футера

Есть код для подключения стилей и скриптов из header в footer для оптимизации

113
Оплата в зависимости от города [закрыт]

Оплата в зависимости от города [закрыт]

Как можно узнать способы оплаты для клиентов, в определенном городе,как здесь

147