[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: jpegtran + exec
forza
Доброго времени суток,

Вобщем стоит задача опитимизировать картинки при помомщи Huffman таблиц и удалить не нужные коментарии если они есть. Гугл подсказывает следующие тулзы: gifsicle, jpegtran, optipng, pngquant. Мне под задачу подходит jpegtran т.к. все изображения у нас jpeg
Система у нас хитрая, поэтому я бы хотел это сделать во время того, как пользователь загружает фотки, но получил вот такой облом:
Если идет запрос к скрипту через HTTP, то функция не отрабатывает (вобзвращает нуль)
$command = "/usr/bin/jpegtran --help";
// or
$command = "jpegtran --help";
exec($command, $output);
var_dump($output);

Если дернуть скрипт из командной строки, то все ок. Виден хелп функции jpegtran
Команды вроде: ls, wget, cd, whois и порчих встроенных вызываются через HTTP запрос без ошибок.

Может быть кто-нибудь сталкивался с подобной проблемой?

Еще вопрос:
Можно ли настроить PHP так, чтобы функция exec была доступна например только для скрипта "ххх", а для всех остальных - нет?

Буду благодарен любой помощи.

_____________
Заработок для веб-разработчиков: CodeCanyon
Мое Портфолио
Arh
Может прав не хватает, выполняется то команда от апача.


_____________
Промокод предоставляет скидку на заказ домена и/или хостинга reg.ru
BFCC-3895-8804-9ED2
vagrand
Или каких-то переменных окружения тоже может не хватать

_____________
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
forza
Цитата
Можно ли настроить PHP так, чтобы функция exec была доступна например только для скрипта "ххх", а для всех остальных - нет?


Нет, не возможно.
И, как уже сказали, дело тут не в php, а в пользователе www-data (апаче), именно от его имени запускается команда в шеле. А ехес() - это всего лишь некий тонель, который из php шлет команду серверу от имени пользователя www-data в шел, а там уже сервер смотит, что можно, а что нельзя.

НО, можно для конкретной команды сделать алианс, пользователю www-data запретить всё и вся (ну.. в разумных пределах), но разрешить выполнение этого алианса.

_____________
[продано копирайтерам]
forza
Спасибо за подсказки, завтра буду пробовать

_____________
Заработок для веб-разработчиков: CodeCanyon
Мое Портфолио
forza
Не помогло. 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 на nobody
roman@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
Цитата (forza @ 29.09.2014 - 15:48)
Может не напрямую запускать, а через .sh файл?

не поможет, скорее всего не хватает прав для доступа к каким то ресурсам. Есть обходной хак, запустить от имени того юзера, под которым он может работать. Поскольку бит suid на скрипт ставить бесполезно, можно запускать скрипт бинарником, владельцем которого задать нужного юзера, и установить на него suid. А из php стартовать бинарник.

UPD пардон, протупил, нужно суид повесить на сам jpegtran (если это бинарник, а не скрипт)
forza
В общем нашел решение. Поменял пользователя от имени которого запускается апач. Профит.
P.S. Зря это вы, killer8080, перечеркнули свой вариант. Прочитал ваш ответ после того как опубликовал свой.

_____________
Заработок для веб-разработчиков: CodeCanyon
Мое Портфолио
AllesKlar
forza
Цитата
Поменял пользователя от имени которого запускается апач

Ну это ты, как бы дыру в безопасности сервера открыл.
Неспроста же апач ограничен сильно в правах.
эээ.. кстати, мы говорим об linux?

_____________
[продано копирайтерам]
forza
Да это я локально пока все делаю. Мне главное чтоб это работало на моем ПК. Потом я это дело передам админу, а он там пусть разбирается кому какие права устанавливать. Да мы говорим о линукс.

_____________
Заработок для веб-разработчиков: CodeCanyon
Мое Портфолио
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.