Доброго времени суток,
Вобщем стоит задача опитимизировать картинки при помомщи Huffman таблиц и удалить не нужные коментарии если они есть. Гугл подсказывает следующие тулзы: gifsicle, jpegtran, optipng, pngquant. Мне под задачу подходит jpegtran т.к. все изображения у нас jpeg
Система у нас хитрая, поэтому я бы хотел это сделать во время того, как пользователь загружает фотки, но получил вот такой облом:
Если идет запрос к скрипту через HTTP, то функция не отрабатывает (вобзвращает нуль)
$command = "/usr/bin/jpegtran --help";
$command = "jpegtran --help";
exec($command, $output);
var_dump($output);
Если дернуть скрипт из командной строки, то все ок. Виден хелп функции jpegtran
Команды вроде: ls, wget, cd, whois и порчих встроенных вызываются через HTTP запрос без ошибок.
Может быть кто-нибудь сталкивался с подобной проблемой?
Еще вопрос:
Можно ли настроить PHP так, чтобы функция exec была доступна например только для скрипта "ххх", а для всех остальных - нет?
Буду благодарен любой помощи.
_____________
Заработок для веб-разработчиков: CodeCanyon Мое
Портфолио
Может прав не хватает, выполняется то команда от апача.
_____________
Промокод предоставляет скидку на заказ домена и/или хостинга reg.ru
BFCC-3895-8804-9ED2
vagrand
24.09.2014 - 17:07
Или каких-то переменных окружения тоже может не хватать
_____________
Senior PHP developer: PHP5, MySQL, JavaScript, CakePHP, Yii/Yii2, Zend Framework, Smarty, XML/Xslt, JQuery, Jquery Mobile, Bootstrap, ExtJS, HTML, HTML5, CSS, Linux, SVN, Git, Memcached, Redis, MongoDB, Zend Guard, Ioncube, FFMpeg, PayPal, Webmoney, Qiwi, Facebook API, Vkontakte Api, Google API, Twitter Api, Steam Api.
Junior Android Developer: Android SDK, многопоточность, работа с HTTP запросами, JSON, SQLite, фрагменты.
AllesKlar
24.09.2014 - 17:18
forza
Цитата |
Можно ли настроить PHP так, чтобы функция exec была доступна например только для скрипта "ххх", а для всех остальных - нет? |
Нет, не возможно.
И, как уже сказали, дело тут не в php, а в пользователе www-data (апаче), именно от его имени запускается команда в шеле. А ехес() - это всего лишь некий тонель, который из php шлет команду серверу от имени пользователя www-data в шел, а там уже сервер смотит, что можно, а что нельзя.
НО, можно для конкретной команды сделать алианс, пользователю www-data запретить всё и вся (ну.. в разумных пределах), но разрешить выполнение этого алианса.
_____________
[продано копирайтерам]
Спасибо за подсказки, завтра буду пробовать
_____________
Заработок для веб-разработчиков: CodeCanyon Мое
Портфолио
Не помогло. XAMPP запущен от имени
nobody.
ps aux | grep httpd
nobody 1818 0.0 0.4 53540 14060 ? S 09:06 0:00 /opt/lampp/bin/httpd -k start -DSSL -DPHP5 -E /opt/lampp/logs/error_log
Права выстовил 777, также изменил ownera на
nobodyroman@forza:/usr/bin$ ls -l | grep jpegtran
-rwxrwxrwx 1 nobody root 30968 Grd 19 2013 jpegtran
В бразуере не работает, в командной строке - работает.
exec('/usr/bin/jpegtran --help', $b);
var_dump($b);
Может не напрямую запускать, а через .sh файл?
_____________
Заработок для веб-разработчиков: CodeCanyon Мое
Портфолио
killer8080
29.09.2014 - 16:01
Цитата (forza @ 29.09.2014 - 15:48) |
Может не напрямую запускать, а через .sh файл? |
не поможет, скорее всего не хватает прав для доступа к каким то ресурсам. Есть обходной хак, запустить от имени того юзера, под которым он может работать. Поскольку бит suid на скрипт ставить бесполезно, можно запускать скрипт бинарником, владельцем которого задать нужного юзера, и установить на него suid. А из php стартовать бинарник.
UPD пардон, протупил, нужно суид повесить на сам jpegtran (если это бинарник, а не скрипт)
В общем нашел решение. Поменял пользователя от имени которого запускается апач. Профит.
P.S. Зря это вы, killer8080, перечеркнули свой вариант. Прочитал ваш ответ после того как опубликовал свой.
_____________
Заработок для веб-разработчиков: CodeCanyon Мое
Портфолио
AllesKlar
29.09.2014 - 23:31
forza
Цитата |
Поменял пользователя от имени которого запускается апач |
Ну это ты, как бы дыру в безопасности сервера открыл.
Неспроста же апач ограничен сильно в правах.
эээ.. кстати, мы говорим об linux?
_____________
[продано копирайтерам]
Да это я локально пока все делаю. Мне главное чтоб это работало на моем ПК. Потом я это дело передам админу, а он там пусть разбирается кому какие права устанавливать. Да мы говорим о линукс.
_____________
Заработок для веб-разработчиков: CodeCanyon Мое
Портфолио