2012-05-17 2 views
0

У меня есть система добавления на мой сайт, который определяет, является ли больше определенного размера изображения, и если да изменяет его в том, что размер, используя код ниже:изображение изменения размера на ImageMagick загрузки

<?php 
if($count >= "1"){ 
    echo "<h3>The Name : ".$_POST['textfield']. " already exists. </h3>"; 
    echo "<h3>Please choose a unique name for this photo</h3>"; 
}else{ 
if (($_FILES["file"]["type"] == "image/gif") 
|| ($_FILES["file"]["type"] == "image/jpeg")) 
    { 
    if ($_FILES["file"]["error"] > 0) 
    { 
    echo "Return Code: " . $_FILES["file"]["error"] . "<br />"; 
    } 
    else 
    { 
    echo "Upload: " . $_FILES["file"]["name"] . "<br />"; 
    echo "Type: " . $_FILES["file"]["type"] . "<br />"; 
    echo "Size: " . ($_FILES["file"]["size"]/1024) . " Kb<br />"; 
    echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br />"; 



    if (file_exists("uploads/images/photography/" . $_FILES["file"]["name"])) 
     { 
     echo "<h3>".$_FILES["file"]["name"] . " already exists. </h3>"; 
     } 
    else 
     { 

// Temporary upload image name 
$original_image = $_FILES["file"]["tmp_name"]; 

// Get the image dimensions 
$size=getimagesize($original_image); 

if((($size[0])<1600) || (($size[1])<1600)){ 

$new_image = $_FILES["file"]["name"]; 

move_uploaded_file($_FILES["file"]["tmp_name"], "uploads/images/photography/" . $_FILES["file"]["name"]); 


echo "File uploaded<br><br>"; 

echo "<img src=\"watermark.php?path=".$new_image."\" width=\"900\"><br><br>"; 

}else{ 

// Name to save the image as - in this case the same as the original 
$new_image = $_FILES["file"]["name"]; 

// Maximum image width 
$max_width = "1600"; 

// Maximum image height 
$max_height = "1600"; 

// Resize the image and save 
exec("convert -size {$size[0]}x{$size[1]} $original_image -thumbnail $max_widthx$max_height $new_image"); 

echo "File uploaded<br><br>"; 

echo "<img src=\"watermark.php?path=".$new_image."\" width=\"900\"><br><br>"; 

$copy = copy($new_image, "uploads/images/photography/".$new_image); 
$unlink = unlink($new_image); 

} 

     echo "Stored in: " . "uploads/images/photography/" . $_FILES["file"]["name"]; 

     $date = date("d/m/y"); 

     $query = mysql_query ('INSERT INTO `ap_photos_list` (`photo_id` , `category_id` , `subcategory_id` , `photo_name` , `photo_size` , `upload_date` , `filename`) VALUES ("", "'.$_REQUEST['category'].'", "'.$_REQUEST['sub_category'].'", "'.$_POST['textfield'].'", "'.($_FILES["file"]["size"]/1024).'KB", "'.$date.'", "'. $_FILES["file"]["name"].'")'); 

     $sizes = mysql_query("SELECT * FROM ap_sizes ORDER BY id ASC"); 

     while($row = mysql_fetch_assoc($sizes)){ 
      $query = mysql_query ('INSERT INTO `ap_photos` (`photo_id` , `category_id` , `subcategory_id` , `photo_name` , `photo_size` , `upload_date` , `filename` , `price` , `size`) VALUES ("", "'.$_REQUEST['category'].'", "'.$_REQUEST['sub_category'].'", "'.$_POST['textfield'].'", "'.($_FILES["file"]["size"]/1024).'KB", "'.$date.'", "'. $_FILES["file"]["name"].'" , "'.$row['price'].'" , \''.$row['size'].'\')'); 
     } 
     } 
    } 
    } 
else 
    { 
    echo "<h3>Invalid file</h3>"; 
    } 
} 
?> 

Однако одна из следующих ошибок или возникают проблемы:

  • я получаю следующие ошибки:

    1. Warning: copy(DSC00103.JPG) [function.copy]: failed to open stream: No such file or directory in /homepages/19/d372249701/htdocs/ap-photo/admin/new_photo.php on line 220
    2. Warning: unlink(DSC00103.JPG) [function.unlink]: No such file or directory in /homepages/19/d372249701/htdocs/ap-photo/admin/new_photo.php on line 221
  • Или это просто не передать изображение

Оба эти результаты позволяют предположить, что образ, который я отправляю не существует?!?

Любые предложения по решению были бы с благодарностью получены.

UPDATE 1

Файл .htaccess использовать для защиты файлов для целей авторского права:

RewriteEngine On 
RewriteCond %{REQUEST_URI} $ 
RewriteRule \.(gif|jpg|png|JPG)$ - [L,F] 
ErrorDocument 403 /admin/uploads/error-docs/403.shtml 

UPDATE 2

Я прошел через код и определил, что проблема находится между:

  • exec("convert -size {$size[0]}x{$size[1]} $original_image -thumbnail $max_widthx$max_height $new_image");

и

  • $copy = copy($new_image, "/homepages/19/d372249701/htdocs/ap-photo/admin/uploads/images/photography/".$new_image); $unlink = unlink($new_image);

Я сомневаюсь, что это отголоски.

ответ

0

Я хотел бы попробовать:

1/отображение каких-либо ошибки во время загрузки с ошибками PHP: http://php.net/manual/en/features.file-upload.errors.php

2/отобразить переменные с эхом на разных этапах, чтобы увидеть, что они содержат.

например.

$original_image = $_FILES["file"]["tmp_name"]; 
echo "original image = $original_image<br>"; 

3/Изолировать отдельные части кода и проверять каждый шаг работы.

Editted Ответ:

Чтобы быть honist я не читал код ImageMagick!

-size {$size[0]}x{$size[1]} is not required 

Я пишу мой код, как это, что делает его немного легче ошибки проверить код ImageMagick, как вы можете добавить эхо, чтобы показать содержимое $ CMD

$cmd = "$original_image -thumbnail $max_widthx$max_height "; 
exec(" convert $cmd $new_image"); 

Imagemagick не велика для проверки ошибок, но вы можете добавить следующее:

$array=array(); 
echo "<pre>"; 
$cmd = "$original_image -thumbnail $max_widthx$max_height "; 
exec(" convert $cmd $new_image 2>&1", $array); 
echo "<br>".print_r($array)."<br></pre>"; 

$ new_image просто должен быть относительный путь к экономии места с именем изображения.

+0

1. Ошибки в загрузке 2. Я попробую это 3. Я считаю, что ошибка исходит от exec() –

+0

все, что я получаю, это те же две ошибки, что и в моем вопросе, и это 'Array ( ) 1' –

+0

Woops - неправильный ответ, но я не могу удалить его. – Bonzo

0

Несколько вещей, чтобы проверить:

  • ли каталог, к которому вы пытаетесь сохранить запись? (uploads/images/photography)
  • Является ли изображение больше, чем позволят ваши настройки PHP? (Как правило, в php.ini, upload_max_filesize)

EDIT

Вам нужно абсолютный путь к вашему положению загрузки в вашем "копировать" сценарий, который должен начать с чем-то вроде

/homepages/19/d372249701/htdocs 
+0

Я обновил свой ответ файлом .htaccess, который я использую для защиты авторских прав на все мои фотографии, но это, похоже, не влияет на него, даже когда я удаляю эти файлы, которые он не загружает и не передает. –

+0

А я думаю, что вижу проблему, см. Редактирование в моем ответе. – jbnunn

+0

Нет, это не работает. Я думаю, что ошибка возникает из $ new_image после функции exec(). copy() не может идентифицировать его. см. мой обновленный вопрос –

0

Кажется, у вашего upload_max_filesize установлено значение по умолчанию 2 МБ. Пожалуйста, установите a.Htaccess со следующим:

php_value upload_max_filesize 110M 
php_value post_max_size   120M 

Для получения дополнительной информации обратитесь к here.

+0

, он установлен на 40M в тот момент, которого достаточно для всех фотографий. –

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