Я использую php-скрипт для реорганизации некоторых файлов, которые я разбросал по разным местам в моей структуре домашних каталогов. Часть PHP, сначала выполняет некоторые сложно логика, которую я не думаю, что bash может сделать эффективно, а затем вызывает скрипт bash для выполнения последних операций перемещения, которые мне нужны.
Когда я запускаю скрипт php из командной строки, он работает нормально. Тем не менее, я хотел бы иметь возможность запускать его через мой httpd-сервер localhost apache, чтобы я мог получать более качественную визуализацию результатов различных операций в моем браузере.
Когда я вызываю скрипт php через браузер, скрипт bash возвращается с ошибками разрешения. Сначала я думал, что смогу это исправить, установив setuid
немного в скрипте bash, но это не сработало, и скрипт все еще работает под идентификатором пользователя apache. (Больше информации здесь о setuid
со скриптами.)
Есть некоторые вещи, которые я не хочу делать:
1) Измените разрешения в моих домашних каталогах, чтобы это работало,
2) Дайте пользователю apache sudo
доступ к /bin/mv
команда и т. д.
Мне интересно, что еще я могу сделать, чтобы скрипт мог выполнить ходы?
-= — = —
Тестовый скрипт php внутри моего DocumentRoot:
<?php
header('Content-Type: text/plain');
$shellResult = array();
$shellReturn = 0;
exec("/Users/user/myScripts/move \"" . "/Users/user/myScripts/mytest.pdf" ."\" \"". "/Users/user/myScripts/testDir" ."\" \"". "aNew.pdf" . "\"", $shellResult, $shellReturn);
echo var_dump($shellResult);
echo $shellReturn;
?>
переехать скрипт bash в / Users / пользователь / MyScripts:
#!/bin/bash -e
echo -e `whoami`
echo -e "$2"echo -e "$3"
if [ ! -e "$1" ] ; then
echo "$1"exit 3
else
if [ -e "$2/$3" ] ; then
echo "$1"exit 4
fi
fi
echo -e "MOVING\n"/bin/mv "$1" "$2/$3"
Результат я получаю в браузере (обратите внимание на ошибку 1 вернулся в конце)
array(5) {
[0]=>
string(4) "_www"[1]=>
string(28) "/Users/user/myScripts/testDir"[2]=>
string(8) "aNew.pdf"[3]=>
string(6) "MOVING"[4]=>
string(0) ""}
1
Задача ещё не решена.
Других решений пока нет …