2010-12-12 3 views
3

У меня есть сценарий, который должен взять изображение и преобразовать его в .jpg. Это код, который делает это произошло:PHP: imagemagick создает пустое изображение с конвертированием

$uploadDir = $_SERVER['DOCUMENT_ROOT'] . "/blogimages/"; 
$tempFile = ereg_replace("'", "_", basename($_FILES['newsImg']['name'])); 
$uploadFile = $uploadDir . $tempFile; 
move_uploaded_file($_FILES['newsImg']['tmp_name'], $uploadFile); 
$newPic = $uploadDir . $blogID . ".jpg"; 
if(file_exists($newPic)){ 
unlink($newPic); 
} 
$convertString = "$IM -strip $uploadFile $newPic"; 
echo "<!-- $convertString -->"; 
exec($convertString); 

, как можно видеть, я поставил окончательную строку в HTML-комментарий, чтобы я мог видеть то, что выполняется. Случается, что преобразованное изображение создается, но это 0-байтовое изображение. Таким образом, данные не записываются в файл. Просто чтобы убедиться, что конвертер действительно работает так, как обычно, я должен скопировать и вставить строку преобразования из комментария html в командную строку, и она работает нормально. Кажется, что в PHP exec есть проблемы. Любые мысли о том, почему это может быть?

+2

Что такое $ IM, и вы сделали проверку ошибок на $ _FILES ['newsImg'] ['tmp_name']? –

+0

Использование расширения PHP imagick упростит отладку ошибок (потому что проблемы затем сообщаются с помощью обычной проверки ошибок PHP) и более высокая производительность (потому что не нужно запускать новый процесс для преобразования изображений). Он не решает вашу проблему напрямую, но, вероятно, поможет отладка. –

+0

К сожалению, я не могу добавить расширения для php. Это общий хостинг, поэтому у меня нет доступа к php.ini. – LoneWolfPR

ответ

1

Начните с проверки ошибок на $_FILES['newsImg']['name'] и следуйте за ним, убедившись, что move_uploaded_file(...) удалось.

+0

Я сделал много шагов. $ IM - это просто путь к imagemagick. Я знаю, что это нормально, иначе он даже не создаст пустой файл. Я также уверен, что файл move_uploaded_file преуспел. Я проверил папку. Я даже разбил его на 2 шага. У меня этот скрипт просто обрабатывал загрузку. Затем, когда это было сделано. Я запустил еще один скрипт, который обрабатывал преобразование, чтобы я знал, что он работает с полностью загруженным изображением. Я получаю одинаковое пустое изображение. Мне просто интересно, есть ли какие-то странные настройки в PHP, которые не позволяют этому работать. – LoneWolfPR

+0

разрешений возможно? Имеет ли папка, в которую вы перемещаете файл, права на запись для пользователя, выполняющего exec()? –

+0

Да. Двойная проверка всех разрешений. – LoneWolfPR

2

Я думаю, возможно, что дескриптор файла загрузки еще не закрыт, когда вы пытаетесь выполнить команду? Таким образом, Imagemagick увидит неполный файл.

Глядя на код, я не вижу, как это может произойти, тем более, что файл перемещается, но это объясняет поведение.

Смежные вопросы