Не можете запустить команду оболочки через php exec, но можете как пользователь на оболочке?

Я пытаюсь заставить exiftool работать на моем выделенном сервере.Проблема в том, что PHP exec, кажется, работает иначе, чем когда команда запускается от имени пользователя.Как ни странно, PHP появляется как тот же пользователь, с которым я вошел в систему, но он не ведет себя так же с системными командами.Как ни странно, все отлично работает на моем локальном хосте, но не на моем сервере.Как уже упоминалось, запускать команды exiftool, вошедшие в систему через ssh, можно.Но, работая в сценарии тестирования php (обратите внимание, я установил exiftool в каждом тестируемом каталоге, и он запускается через ssh), ничего не доступно, хотя он запускается как пользователь orangeman ...И это не удаетсяВот обновление - проведя на этом весь день:На оболочке:В PHP ---- +: = 1 =: + ----И вот что этот файл ссылается на:Я также пытался создавать символические ссылки различного рода, вмешиваясь в основную переменную $ PATH с помощью ---- +: = 4 =: + ---- в php ... Я действительно в неведении.Работает на локальном хосте, а не на выделенном сервере.Я обновил это с наградой - это серьезная проблема в разработке.Я на выделенном сервере, и проблема описана выше.ОБНОВЛЕНИЕ Согласно предложению @gcb, я смог распечатать ошибку, которая возникает, когда функция phec exec () запускает системную команду без эффекта.PHPВыход:ОБНОВИТЬРешение @ gcb сработало.Большое спасибо.
4 голоса | спросил Orangeman555 14 Maypm14 2014, 23:02:01

4 ответа


0
Так что у вас сейчас нет проблемы с php, но есть проблема с perl.Ваш путь включения плох.ответ здесь http://u88.n24.queensu.ca/exiftool/forum/index.php?topic=2217.0Я все еще думаю, что использование моего предложения № 3 из предыдущего ответа исправит это.Если нет, и вы действительно хотите знать причину, создайте новый скрипт на Perl, который просто выводит содержимое ---- +: = 1 =: + ----, и запустите его через оболочку и через php.вы увидите разницу, тогда вам нужно найти, какой скрипт входа не соблюдается в php, и открыть ошибку в php для ---- +: = 2 =: + ---- не уважая его ...хотя более простое решение для вашей проблемы (поскольку она не выглядит так, как будто вы слишком заинтересованы в объяснениях) - просто установить PERLLIB var перед вызовом скрипта.Итак, просто сделайте:---- +: = 3 =: + ---- Это скажет вам, где установлена ​​библиотека.скажем, это возвращает ---- +: = 4 =: + ----добавить ---- +: = 5 =: + ---- к вашему вызову exec ().exec ("PERL5LIB = /example /perl /sudo /var/www/myscript/execscript.sh {$ param}");
ответил gcb 18 Maypm14 2014, 12:06:14
0
0) вы должны посмотреть свой журнал ошибок.обычно в /var /log /apache /errorу него будут сообщения типа «отказано в доступе» или что-то еще.1) вы явно не получаете достаточно вывода этой команды, чтобы увидеть любую ошибку.поэтому попробуйте запустить его с помощью ---- +: = 0 =: + ---- .это перенаправит stderr в stdout, поэтому на выходе появятся ошибки.не уверен, что это актуально или php уже делает это.Вы также можете использовать ---- +: = 1 =: + ---- вместо ---- +: = 2 =: + ----2) безопасный режим exec dirВаш файл может быть вне вашего безопасного режима exec dir.прочитайте это:http://www.php.net/manual/en/ini.sect.safe-mode.php#ini.safe-mode-exec-dir3) все остальное терпит неудачу, запустите команду как оболочку входа в систему, в которой должны быть загружены те же скрипты, что и при входе через ssh.просто замените exec на ---- +: = 3 =: + ----... я уверен, что просмотр журнала ошибок решит вашу тайну.
ответил gcb 18 Mayam14 2014, 07:54:32
0
Одна из возможностей заключается в том, что в командной строке ваш ---- +: = 0 =: + ---- был установлен /изменен как вашим ---- +: = 1 =: + ----, так и вашим---- +: = 2 =: + ---- потому что ваша командная строка является оболочкой для входа.Когда PHP вызывается веб-сервером, он запускается как "orangeman", НО только как оболочка, а не оболочка для входа, поэтому его ---- +: = 3 =: + ---- может не совпадать, что вы здесь видите.Вы пытались вставить ---- +: = 4 =: + ---- в свой ---- +: = 5 =: + ---- ?
ответил aqn 15 Mayam14 2014, 06:47:51
0
Я считаю, что это происходит потому, что у вас есть личная установка Perl для вашего пользователя.В основном @INC - это массив, который Perl использует для поиска своей библиотеки, и он не содержит путь к вашей установочной библиотеке.Есть несколько способов изменить @INC, которые вы можете найти по ссылке ниже:http://perlmaven.com/how-to-change-inc-to-find-perl-modules-in-non-standard-locationsНадеюсь, это поможет.
ответил Tiago Lopo 18 Maypm14 2014, 12:44:51

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132