Вот часть скрипта, принцип, большая фотка копируется в /i/gi/${id}.jpg, уменьшенная в /i/gi/${id}_m.jpg, самая маленькая в /i/gi/${id}_s.jpg. Но! Получается так, что копируется только большая, а две маленькие не делаются. Я так понимаю не вызывается скрипт convert. НО! Парсер никак ошибок не выдают, так же как и Apache, то есть фотка добавляется, но уменьшенные не создаются..
Пробовал возвращать другую сборку, которая была до этого, просило пересобрать парсер с --disable-safe-mode, установил эту - фотки не конвертируются, и ошибок никаких нету.
Но когда я так делал, у меня convert находился. Для теста, я изменял путь на /local/bin/convert - выдавало ошибку, что там нету такого файла. Когда /usr/local/bin/convert - находило, но выдавало ошибку, что "запрещено использование файлов вне группы" как-то так, и просьба собрать parser --disable-safe-mode, значит путь правильный..
я задал ему вначале $request:document-root[], и теперь повторюсь. Путь к convert находится правильно, так бы парсер давал ошибку, что нету такого файла по такому пути, а так путь правильный, почему же он тогда сказал мне пересобрать в disable safe mode, чтобы оперировать файлами?..
почему же он тогда сказал мне пересобрать в disable safe mode, чтобы оперировать файлами?
Не чтобы оперировать файлами, а вероятно чтобы запустить /usr/local/bin/convert, владелец которого root (в сообщении об ошибке пишется полное имя файла, к которому нельзя обратиться). В таких случаях используется промежуточный shell скрипт.
Это обходится написанием однострочного скрипта с вашими правами, так называемый врапер. Разместить его можете где угодно и дать права на запуск, например 755
/home/Digger/bin/convert
#!/bin/sh# /usr/bin/env - находится во всех ос в одном месте, по крайней мере во FreeBSD и Linux# эта штука находит команду "convert" которая как Вы заметили может находиться вразных метсах# и передаёт параметры переданные скрипту $*
/usr/bin/env convert $*
зы: У данного подхода есть проблемма с безопасностью, тк если из ваших скриптов обнаружится возможность модифицировать файл с правами на запуск, то в системе можно сделать всё что угодно с правами вашего пользователя. ззы: писал по памяти, могут быть очепятки
Собственно в итоге должен получиться test.png рядом с test.jpg. Эта форма вызова 100% работает если convert и test.jpg существуют и если парсер -- grpunlim.
1) Что такое --disable-safe-mode? 2) Атеперь что мы сделали?
Подсказки смотреть после ответа на вопросы :) 1) --disable-safe-mode - грубо говоря такой if который посылает всех подальше, если попытаться запустить скрипт, приложение которым не владеешь или ты root
Пример: Вы пользователь Digger(1005) и состоишь в группе Digger(1005) - в скобкай условный id пользовтеля есть пользователь root(0) который состоит в группе wheel(0) в bsd как-то так называется есть исполняемый файл парсера владелец и группа у которого Digger:Digger
В момент запуска этого файла скрипт осознаёт :) что оно Digger:Digger и может работать с файлами принадлежащими хотябы пользователю Digger или находящимися в группе Digger (в некоторых случаях проверяется величина id группы (и)или пользователя она должна быть больше определённой, но это не из этой оперы)
Контрольные вопросы a) Кому приналежит файл /usr/local/bin/convert б) Кому принадлежит созданный Вами файл /home/Digger/bin/convert.sh в) Какая реакщия будет в случае а и в случае б? Почему?
2) а) Создав файл в вашей домшней директории вы автоматичческие являетесеь его владельцем и он автоматически попадает в вашу групп обычно с правами 644 (погуглите на эту тему, оч полезно) б) меняете права на 755 (гуглить), те разрешаете его запускать себе, группе и кому не поподя и ещё несколько прав наздаёте налево и на право(гуглить) в) когда парсер запускается и проверяет права файла он признаёт его за своего, как следствие у него не возникает дополнительных вопросов и он продолжает работать дальше
а как ещё было прокомментировать ваше сообщение о том, что вы не удосужились выяснить, работает-ли вообще у вас nconvert, а занялись поисками/сборками parser без safe моде и ковырянием с парсерным кодом.
P.S. это я ещё сдерживал себя во время написания того комментария :)
Я сообщил в тех.поддержку хостинга, что мне нужен imagemagick convert, они якобы установили, и дали путь к нему. Я в скрипте прописал, и стала появляться parser exception: Recompile parser .. --disable-safe-mode.
варианты проверки: 1. зайти шелом и запустить нужную программу из командной строки 2. то-же самое, но написав .sh файл который вызывает нужную программу с фиксированными параметрами и весь output пишет в файл 3. попробовать например из perl 4. если уж используете парсер, то хотя бы про метод, с помощью которого вызывается внешний скрипт, можно было страничку текста прочитать (а там и про .status и про .stderr есть), особенно учитывая тот факт, что вы ранее некорректно использовали путь к скрипту в этом методе и вам на это указали.
P.S. convert, nconvert -- в данном случае разницы никакой. любой внешний скрипт проверяется примерно аналогично