2016-01-18 3 views
0

Итак, я создал сайт, который создает миниатюры, используя скрипт php, который использует imagick для создания миниатюр. На моем личном веб-хостинге (Hostmonster) это работает отлично. Когда я сделал копию своего сайта и загрузил его на сайт моего клиента (размещенный на domain.com), он не удался. Запрашиваемая domain.com, что было, они сказали:Imagick convert vs imagick PHP

«У нас есть ImageMagick бинарники Но это не будет выполнено на PHP так Imagick не будет работать так, вы не сможете использовать Imagick в PHP.. встроенный класс. Вы должны использовать альтернативу «конвертировать» утилита»

Я никогда не использовал„конвертировать утилиту“раньше, так что я не уверен, что они говорят. Должен ли я заглянуть в это больше? Или стреляйте в них и просто придерживайтесь моего исходного хоста (Hostmonster), где imagick работает на PHP? Мне кажется, что я должен знать об этой альтернативе, чтобы быть более округлой в моих знаниях, но задаюсь вопросом, стоит ли мне учиться, или просто забыть об этом и двигаться дальше.

Предложения о том, как продвигаться вперед или ресурсы по этой альтернативе будут оценены. Благодарю.

ответ

2

Что они говорят о том, что использует функцию PHP exec() для выполнения ImageMagick так же, как и в командной строке. В SO используются сотни примеров использования ImageMagick из командной строки, просто найдите ImageMagick и convert, который является именем основного двоичного файла, который вы использовали бы в командной строке.

Синтаксис довольно прост:

convert input.png ...<processing> ... output.png 

Таким образом, вы могли бы сделать

convert input.jpg -thumbnail x320 -quality 80 result.png 

Если вы хотите сделать это в PHP, ваш провайдер предлагает вам использовать:

$cmd = "/usr/local/bin/convert '/path/to/input.jpg' -thumbnail x320 -quality 80 '/path/to/result.png'"; 
exec($cmd, $output, $retval); 

Я не могу прокомментировать относительную эффективность, заслуги или что-то другое (хотя это приносит лени или некомпетентности их часть), но она должна работать нормально.

+3

Хороший ответ. Тем не менее, я хочу посоветовать, что 'exec()' предназначен для тщательного использования, потому что это может быть опасно. –

+0

@ MarcosPérezGude Спасибо, что поделились своими советами. –

+0

Спасибо @MarkSetchell за понимание. Я попытаюсь заставить это работать, но я согласен, мне показалось, что именно domain.com сбросил мяч. Если я не могу заставить его работать в некоторой степени легко, я, вероятно, удалю их и вернусь к другому хосту. – dotcommer

0

Хорошо, я пытаюсь реализовать этот альтернативный способ, но я не уверен, что выполняю его правильно. На данный момент это мой код, и я получаю внутреннюю ошибку 500. Я, к сожалению, не могу понять, как получить сообщения об ошибках, сгенерированные с помощью domain.com, поэтому я лечу здесь немного слепой.

Используя выше $cmd = "/usr/local/bin/convert '/path/to/input.jpg' -thumbnail x320 -quality 80 '/path/to/result.png'"; exec($cmd, $output, $retval);

Я пытаюсь вставить пару переменных для ввода пути, и результат путь:

$thumbsPath = "./RecentAdditions_thumbnails/"; 
if (!file_exists($thumbsPath)) { 
    mkdir($thumbsPath, 0777, true); 
} 

foreach($files as $file) 
    if(!file_exists($thumbsPath.basename($file, ".jpg")."_thumb.jpg")){ 
     $cmd = "/usr/local/bin/convert ''./'"$file"' -thumbnail x200 -quality 100 '"$thumbsPath.basename($file, ".jpg")."_thumb.jpg'"; 
     exec($cmd, $output, $retval); 
+0

Пробовал ли вы простой тест, который я предложил выше? – Bonzo

+0

Я не к сожалению. Я очень привязан к времени. Легче было запустить domain.com и вернуться к Hostmonster, где мне не нужно ничего переписывать. Если бы у меня было больше времени, я бы попытался заставить это работать, но я ценю ваши усилия, чтобы помочь! – dotcommer

+0

Приятно знать, что произошло; возможно, у вас может быть другой ход на вашем текущем хосте, когда вы получите некоторое время. Я предпочитаю Imagemagick и командную строку, поскольку у нее больше возможностей, и мне проще в использовании. – Bonzo

1

Как я говорю людям начать с какой-то вещи просто первым. Простой код изменения размера изображения в той же папке; если это работает, переходим к следующему шагу.

Вам необходимо отключить безопасный режим, а с помощью phpsusex или любого другого, что он называется, вам понадобится CHMOD из 755 иначе 777 в папке, в которую будет сохранено изображение.

попробовать:

$cmd = "input.jpg -thumbnail x200 -quality 100 output.jpg"; 
exec("convert $cmd"); 

Вы, возможно, придется использовать путь для преобразования, но если Imagemagick правильно установлен, он должен работать только с преобразования.

В некоторых случаях Imagick быстрее, чем Imagemagick, и, как сказано, если вы принимаете вход пользователя, убедитесь, что вы хорошо выполняете проверку данных.

На другом предмете Я стараюсь держать код в команде простым, поэтому я бы сохранил все это $ thumbsPath.basename ($ file, ".jpg") в качестве переменной и использовал это в IM-коде. Особенно в этом случае, когда вы используете его дважды в своем коде.

Вы также можете выделить $ cmd для подтверждения того, что он содержит; иногда это не то, что вы ожидаете!