0

私のウェブサイトには、画像が特定のサイズよりも大きいかどうかを検出し、その場合は次のコードを使用してそのサイズにサイズ変更するアップロードシステムがあります。

<?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
  • または、画像を転送しないだけです

これらの結果は両方とも、私がアップロードしている画像が存在しないことを示唆していますか?!?

解決策の提案はありがたいことに受け取られます。

更新1

著作権の目的でファイルを保護するために使用する.htaccessファイル:

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

更新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);

エコーだとは思えません。

4

3 に答える 3

0

私は試してみます:

1 /アップロード中にエラーが発生した場合にphpエラーを表示する:http://php.net/manual/en/features.file-upload.errors.php

2 /さまざまな段階でechoを使用して変数を表示し、それらに何が含まれているかを確認します。

例えば

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

3 /コードの個々の部分を分離し、各ステップが機能することを確認します。

編集された答え:

正直なところ、私はImagemagickコードを読んでいませんでした!

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

私はこのようにコードを書いています。これにより、エコーを追加して$ cmdの内容を表示できるため、Imagemagickコードのエラーチェックが少し簡単になります。

$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は、画像名を含む保存場所への相対パスである必要があります。

于 2012-05-17T16:25:57.110 に答える
0

upload_max_filesize がデフォルトの 2MB に設定されているようです。次のように .htaccess を設定してください。

php_value upload_max_filesize    110M
php_value post_max_size          120M

詳細については、こちらを参照してください

于 2012-05-17T15:39:26.617 に答える
0

いくつかの点を確認してください。

  • 保存しようとしているディレクトリは書き込み可能ですか? (アップロード/画像/写真)
  • 画像は、PHP 設定で許可されているサイズよりも大きくなっていますか? (通常、php.ini、upload_max_filesize にあります)

編集

「コピー」スクリプトでアップロード場所への絶対パスが必要になります。これは次のようなもので始まる必要があります

/homepages/19/d372249701/htdocs
于 2012-05-17T15:38:21.710 に答える