2017-05-27 7 views
1

サイトの訪問者が画像をアップロードするためのフォームに「アップロードファイル」フィールドがあります。フォームフィールドを使用してアップロードイメージファイルの名前を変更することはできますか?

<input type="file" name="fileToUpload" id="fileToUpload"> 

現在のところ、ファイルはアップロードされたのと同じ '名前'で私のサーバーに保存されます。

私のフォームに(下のような)入力フィールドを追加したいので、ユーザーは[画像]ファイルに新しい名前を入力することができます。

<input name="imageRename" id="imageRename"> 

私はそれは私のサーバーに保存されます前にファイルの名前を変更するために、現在のPHPコードを変更することにいくつかのアドバイスを必要としています。ここで

画像処理のための現在のPHPコードです:

<?php 
$target_dir = "articles/article-images/"; 
$target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]); $uploadOk = 1; 
$imageFileType = pathinfo($target_file,PATHINFO_EXTENSION); 
if(isset($_POST["submit"])) 
{ 
    $check = getimagesize($_FILES["fileToUpload"]["tmp_name"]); 
    if($check !== false) 
    { 
     echo "". $check[""].""; $uploadOk = 1; 
    } 
    else 
    { 
     echo "&#xd7; FILE IS NOT AN IMAGE"; $uploadOk = 0; 
    } 
} 
if(file_exists($target_file)) 
{ 
    echo "&#xd7; THIS IMAGE ALREADY EXIST ON SERVER"; $uploadOk = 0; 
} 
if ($_FILES["fileToUpload"]["size"] > 500000) 
{ 
    echo "&#xd7; FILE IS TOO LARGE"; $uploadOk = 0; 
} 
if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg" && $imageFileType != "gif") 
{ 
    echo "&#xd7; ONLY JPG, JPEG, PNG & GIF FILES ARE PERMITTED"; $uploadOk = 0; 
} 
if ($uploadOk == 0) 
{ 
    echo "&#xd7; IMAGE WAS NOT UPLOADED"; 
} 
else 
{ 
    if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) 
    { 
     echo '<img class="fixed-ratio-resize" src="../../articles/article-images/'. basename($_FILES["fileToUpload"]["name"]). '">'; 
    } 
    else 
    { 
     echo "&#xd7; IMAGE WAS NOT UPLOADED"; 
    } 
} 
    ?> 
+0

ファイルの名前を変更する場合は、「move_uploaded_file」を使用します。あなたのターゲットファイル名 '$ target'は、ファイルを保存する新しい名前とパスになります。 –

答えて

0

たとえば私のコメント:それあなたwhant imag_xpto.jpgコールimage_10.jpg

ファイル名をアップロードする

ファイル

変更するコード:

$target_dir = "articles/article-images/"; 
$target_new_name = "imag_xpto.jpg"; 
//your code... 
$target = $target_dir.$target_new_name; 
if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)){ 
//Your code... 

フィールドに新しい名前を付ける場合は、htmlに入力フィールドを作成してこのコードを使用するだけです。

ポストのためのコード:

HTML:

<input type = "text" name = "inputfieldname"> 

はPHP:私が持っている

$target_new_name = $_POST['inputfieldname']; 

デバッグのためのいくつかのヒントをあなたのコードとあなたのコード

<?php 

if(isset($_POST["submit"])) 
{ 
    $target_new_name = $_POST["inputfieldname"]; //you can and you should protect, if you are sending null or empty or undefined it can cause problems in the future. For protect you can use isset and verify if the name it's null or "". 
$target_dir = "articles/article-images/"; 
$target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]); $uploadOk = 1; 
$imageFileType = pathinfo($target_file,PATHINFO_EXTENSION); 
$target_new_file_name = $target_dir.$target_new_name.".".$imageFileType; // Check with an "error_log($target_new_file_name);" the string "$target_new_file_name". Because it is in the creation of the new string, that the problems occur 
    $check = getimagesize($_FILES["fileToUpload"]["tmp_name"]); 
    if($check !== false) 
    { 
     echo "". $check[""].""; $uploadOk = 1; 
    } 
    else 
    { 
     echo "&#xd7; FILE IS NOT AN IMAGE"; $uploadOk = 0; 
    } 
} 
//if(file_exists($target_file)) - You should now verify that the new file name exists on the server 

if(file_exists($target_new_file_name)) 
{ 
    echo "&#xd7; THIS IMAGE ALREADY EXIST ON SERVER"; $uploadOk = 0; 
} 
if ($_FILES["fileToUpload"]["size"] > 500000) 
{ 
    echo "&#xd7; FILE IS TOO LARGE"; $uploadOk = 0; 
} 
if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg" && $imageFileType != "gif") 
{ 
    echo "&#xd7; ONLY JPG, JPEG, PNG & GIF FILES ARE PERMITTED"; $uploadOk = 0; 
} 
if ($uploadOk == 0) 
{ 
    echo "&#xd7; IMAGE WAS NOT UPLOADED"; 
} 
else 
{ 
    if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_new_file_name)) 
    { 
     echo '<img class="fixed-ratio-resize" src="'.$target_new_file_name.'">'; // I'm not really sure about this part of the code, I'm used to another type of html creation in php 
    } 
    else 
    { 
     echo "&#xd7; IMAGE WAS NOT UPLOADED"; 
    } 
} 
    ?> 

を向上チャンスがなかったテストすると、コードにエラーがある可能性があります。

シンプルなやり方。質問がありましたら、私がお答えしようとします。

+0

あなたの時間と提案Joseさん、ありがとうございます。私はあなたのコードを試しました。これまでの運はありません。私はおそらく、あなたの編集/追加がどこに行かなければならないかについて、まだ混乱していると思います。注:ここに私の記事に含まれているコードは、名前の変更を除いて、私がそれを必要とする方法で動作します。それ以外の部分は素晴らしい作品です。私はイメージファイルをフォームの入力フィールドに基づいて新しい名前で保存したいだけです。それを私のフルコードで達成するためにあなたの編集内容を含めることは可能でしょうか?注:また、いくつかの問題を解決するために...新しいファイル名を提供するフォームテキストフィールドの名前は 'timeValue'です。 –

+0

あなたがそれを望むなら、フォームからあなたのhtmlを置く必要があります。 –

+0

<入力クラス= "のsubmitButton" タイプ= "提出" NAME = "提出" 値= "送信">

0

ユーザーが実際に新しい名前の値を送信したかどうか、また元の(またはランダムな)値を使用しない場合はテストする必要があります。また、$ _FILESオブジェクトにある定義済みのエラー特性を使用して、処理を支援することもできます。他の唯一の違いは、私がテストの目的のためにc:\temp\fileuploadsに設定していたターゲット・ディレクトリのパスになります - 私は以下のフォームを使用して、これをテストしたとき

<?php 

    $filefield='fileToUpload'; 
    $textfield='imageRename'; 

    /* 
     function to return the reason for any failure 
    */ 
    function uploaderror($code){ 
     switch($code) { 
      case UPLOAD_ERR_INI_SIZE: return "The uploaded file exceeds the upload_max_filesize directive in php.ini"; 
      case UPLOAD_ERR_FORM_SIZE: return "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form"; 
      case UPLOAD_ERR_PARTIAL: return "The uploaded file was only partially uploaded"; 
      case UPLOAD_ERR_NO_FILE: return "No file was uploaded"; 
      case UPLOAD_ERR_NO_TMP_DIR: return "Missing a temporary folder"; 
      case UPLOAD_ERR_CANT_WRITE: return "Failed to write file to disk"; 
      case UPLOAD_ERR_EXTENSION: return "File upload stopped by extension"; 
      default: return "Unknown upload error"; 
     } 
    } 

    /* 
     test that the required items are present in posted data 
    */ 
    if(isset($_FILES[ $filefield ],$_POST[ $textfield ])){ 

     $target_dir = "articles/article-images/"; 
     $errors=array(); 

     /* set permitted file extensions - not foolproof btw */ 
     $allowed=array('jpg','jpeg','png','gif'); 

     /* get the properties of the uploaded file */ 
     $obj=(object)$_FILES[ $filefield ]; 
     $name=$obj->name; 
     $tmp=$obj->tmp_name; 
     $size=$obj->size; 
     $error=$obj->error; 
     $type=$obj->type; 


     /* 
      determine the new name of the file if the user supplied a new name or not 
     */ 
     $newname = !empty($_POST[ $textfield ]) ? $_POST[ $textfield ] : false; 
     $ext = pathinfo($name, PATHINFO_EXTENSION); 

     $name =($newname) ? $newname .= ".{$ext}" : $name; 


     /* no errors so far, proceed with logical tests of your own */ 
     if($error==UPLOAD_ERR_OK){ 

      if(!in_array($ext,$allowed)) $errors[]="&#xd7; ONLY JPG, JPEG, PNG & GIF FILES ARE PERMITTED"; 
      if($size > 500000)$errors[]="&#xd7; FILE IS TOO LARGE"; 
      if(!getimagesize($tmp))$errors[]="&#xd7; FILE IS NOT AN IMAGE"; 
      if(!is_uploaded_file($tmp))$errors[]="&#xd7; POSSIBLE FILE UPLOAD ATTACK"; 


      if(empty($errors)){ 
       /* 
        set the new file location 
       */ 
       $targetfile = $target_dir . DIRECTORY_SEPARATOR . $name; 

       /* 
        save the file 
       */ 
       $status = move_uploaded_file($tmp, $targetfile); 

       /* 
        determine what to do if it succeeded or not 
       */ 
       if($status){ 
        echo '<img class="fixed-ratio-resize" src="../../articles/article-images/'. basename($name). '" />'; 
       } else { 
        exit('error'); 
       } 
      } else {/* edited: changed commas to periods */ 
       exit('<pre>'.print_r($errors,1).'</pre>'); 
      } 
     } else { 
      exit(uploaderror($error)); 
     } 
    } 
?> 

上記の罰金働きました。

<form id='fileupload' action='/test/so_upload_image_target.php' method='post' enctype='multipart/form-data'> 
     <h1>Upload an image - test</h1> 
     <input type='file' name='fileToUpload' /> 
     <input type='text' name='imageRename' value='boobies' /> 
     <input type='submit' /> 
    </form> 
+0

おかげでラム。コードについてテストします。私は$ textfieldを指定した場所を想定していますが、名前を入力しているテキストフィールドの名前に置き換えますか?また、...行に構文エラーが表示されています。exit( '

',print_r($errors,1),'
');とにかくコードを試してみます。私は直後にフィードバックでポップアップします。 –

+0

残念ながら、そのコードは機能しませんでした。画像を保存しないだけでなく、HTMLも表示されませんでした。 htmlファイルは正しいフォルダに保存されましたが、表示されませんでした。そして、画像は保存も表示もされませんでした。 –

+0

PHPエラーログにエラーがありましたか? – RamRaider

関連する問題