Я пытаюсь заставить exiftool работать на моем выделенном сервере. Проблема в том, что PHP exec, похоже, работает иначе, чем когда команда запускается от имени пользователя. Как ни странно, PHP отображается как тот же пользователь, с которым я вхожу в систему, но он не ведет себя так же с системными командами.
Как ни странно, все отлично работает на моем локальном хосте, но не на моем сервере.
Итак, как уже упоминалось, выполнение команд exiftool, зарегистрированных через ssh, нормально.
Но при запуске в сценарии тестирования php (обратите внимание, что я установил exiftool в каждый проверенный каталог, и он работает через ssh), ничего недоступно, хотя он работает как пользователь orangeman ...
И это не удается
Вот обновление, которое я провел в этом весь день:
На оболочке:
-bash-4.1$ which exiftool -a
~/perl5/bin/exiftool
/usr/bin/exiftool
~/perl5/bin/exiftool
В PHP shell_exec('exiftool -a');
/usr/bin/exiftool
И вот на что ссылается этот файл:
lrwxrwxrwx 1 root root 33 May 15 02:10 exiftool -> /home/orangeman/perl5/bin/exiftool
Я также пробовал создавать символические ссылки различного типа, изменяя основную переменную $ PATH через putenv();
в php ... Я действительно в темноте. Работает на локальном хосте, а не на выделенном сервере.
Я обновил это с помощью щедрости - это серьезная проблема в разработке.
Я использую выделенный сервер, и проблема описана выше.
ОБНОВЛЕНИЕ. Согласно предложению @gcb, мне удалось распечатать ошибку, которая возникает, когда функция php exec () запускает системную команду без какого-либо эффекта.
PHP
<?php
exec('exiftool 2>&1', $output, $r);
var_dump($output, $r);
?>
Вывод:
array(2) {
[0]=>
string(230) "Can't locate Image/ExifTool.pm in @INC (@INC contains: /bin/lib /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 .) at /bin/exiftool line 33."
[1]=>
string(59) "BEGIN failed--compilation aborted at /bin/exiftool line 33."
}
ОБНОВЛЕНИЕ
Решение @gcb сработало. Большое Вам спасибо.
/usr/bin/exiftool
не является каталогом./usr/bin
- это каталог, а/usr/bin/exiftool
(если он существует) - это файл. - person that other guy   schedule 14.05.2014