1

異なる名前のphp を使用して、サーバーに (mysql テーブルのパスを使用して) 画像を 2 回アップロードしようとしています。画像の一方のバージョンは「xxxx.png」、もう一方のバージョンは「xxxxt.png」です。

私のphpは:

<?php

if ($_FILES['photo']) {
  $target = "images/properties/";  
  $target = $target . basename( $_FILES['photo']['name']); 

  $pic = "images/properties/" .(mysql_real_escape_string($_FILES['photo']['name']));

  if (move_uploaded_file($_FILES['photo']['tmp_name'], $target)) {
    mysql_query("INSERT INTO `images` (`productcode`, `photo`) VALUES ('$productcode', '$pic' )");
    echo "The new image has been added successfully"; 
  } else { 
    echo "Error uploading new image - please check the format and size"; 
  }
}

?> 

上記のコードは、イメージを mysql データベースに挿入し、ファイルをサーバーに正しくアップロードします。ただし、「サムネイル」バージョンで異なる命名規則を使用して、同じ画像を 2 回アップロードしようとしています。私のhtmlのスライドショースクリプトは、ファイル名の末尾に「t」が付いている場合にのみサムネイルを認識します。これが私の問題です。

これを実現するためにphp の copy()関数を調べるように勧められましたが、そのような関数を既存のコードに組み込む方法が非常に不明確です。必要に応じて、html またはその他の情報を提供させていただきます。

どんな助けでも大歓迎です。同じことを見つけようとする別のスレッドがありましたが、あまり明確ではありませんでした!

ありがとうございます

4

2 に答える 2

2

私の理解が正しければ、このファイルを 2 回アップロードする必要はありません。このファイルは既にサーバー上にあります。そのため、サーバーのハード ドライブにコピーし (必要に応じて、サムネイルのようにするためにいくつかのトランジションを実行します)、データベースを更新する必要があります。

コードは次のようになります。

<?php 
if($_FILES['photo'])
{
  $target_dir = "images/properties/";

  $upload_file_name = basename( $_FILES['photo']['name']);
  $upload_file_ext = pathinfo($_FILES['photo']['name'], PATHINFO_EXTENSION);

  $target_file = $target_dir . $upload_file_name . '.' . $upload_file_ext;
  $target_file_sql = $target_dir . mysql_real_escape_string($upload_file_name . '.' . $upload_file_ext);
  $target_thumb = $target_dir . $upload_file_name . 't.' . $upload_file_ext;
  $target_thumb_sql = $target_dir . mysql_real_escape_string($upload_file_name . 't.' . $upload_file_ext);

  if (move_uploaded_file($_FILES['photo']['tmp_name'], $target_file)) 
  {  
    mysql_query("INSERT INTO `images` (`productcode`, `photo`) VALUES ('$productcode', '$target_file_sql' )");
    echo "The new image has been added successfully"; 

    if (copy($target_file, $target_thumb))
    {
        mysql_query("INSERT INTO `images` (`productcode`, `photo`) VALUES ('$productcode', '$target_thumb_sql' )");
        echo "The new thumb image has been added successfully";
    } else 
    {
        echo "Error copying thumb file";
    }

  } else 
  { 
    echo "Error uploading new image - please check the format and size"; 
  }
}

繰り返しますが、ファイルを 2 回続けてアップロードする必要はありません。サーバーにコピーするだけです。

于 2012-05-09T21:49:43.313 に答える
1

アドバイスされているように、copy() を使用する必要があります。これを完全にテストしたわけではありませんが、試してみてください:

<?php

if ($_FILES['photo'])
{
    $target = "images/properties/";

    $ext = array_pop(explode('.', $_FILES['photo']['name']));
    $copy = $target . basename($_FILES['photo']['name'], '.' . $ext) . 't.' . $ext;

    $target = $target . basename($_FILES['photo']['name']);

    $pic = "images/properties/" .(mysql_real_escape_string($_FILES['photo']['name']));

    if (move_uploaded_file($_FILES['photo']['tmp_name'], $target))
    {
        copy($target, $copy);
        mysql_query("INSERT INTO `images` (`productcode`, `photo`) VALUES ('$productcode', '$pic' )");
        echo "The new image has been added successfully";
    }
    else
    {
        echo "Error uploading new image - please check the format and size";
    }
}
?>
于 2012-05-09T21:19:25.327 に答える