php
  • upload
  • rename
  • filenames
  • auto-increment
  • 2016-12-06 7 views 0 likes 
    0

    ユーザーはプロフィール画像を1枚ずつアップロードできますが、必要なだけ頻繁にアップロードできます。ファイル名内の自動インクリメント数

    はのは、ユーザ1が画像をアップロードと仮定しましょう、このコードは私のアップロード・フォルダに保存されます:

    <?php 
    
    $fileData = pathinfo(basename($_FILES["fileToUpload"]["name"])); 
    
    $fileName = 'user_id_#1#_profilepic_#' . uniqid() . '#.' . $fileData['extension']; 
    
    $target_path = "uploads/" . $fileName; 
    
    while(file_exists($target_path)) { 
        $fileName = 'user_id_#1#_profilepic_#' . uniqid() . '#.' . $fileData['extension']; 
        $target_path = ($_SERVER['DOCUMENT_ROOT'] . "uploads/" . $fileName); 
    } 
    
    if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_path)) { 
    
        echo "The image was successfully uploaded. <a href='index.php'>Add another image</a>"; 
    } 
    else { 
        echo "There was an error uploading the file, please try again!"; 
    } 
    
    ?> 
    

    このuniqid()、それは以降で上の画像を見つけるために悪夢だから、交換する必要があります正しい順序。

    私がイメージをしたい - このように見えるように - アップロード後:

    user_id_#1#_profilepic_#1#.jpg 
    user_id_#1#_profilepic_#2#.jpg 
    user_id_#1#_profilepic_#3#.png 
    user_id_#1#_profilepic_#4#.gif 
    user_id_#1#_profilepic_#5#.jpg 
    and so on... 
    

    私はこれをどのように行うことができますか?私はこれまでのところ考えていません。

    +0

    代わりにタイムスタンプのようなものを使用してみませんか? '$ fileName = 'user_id_#1#_profilepic_#'です。時間()。 '#' 。最初にそのオプションについて知りませんでしたので、$ fileData ['extension']; ' – AbraCadaver

    +0

    ですが、私は別の画像を表示したいときに、その名前をどうやって読み込むことができるのでしょうか? 私のファイル名に自動インクリメント番号がある場合は、最も高い数字から始め、クリック時に低い数字に移動することができます。しかし、代わりにファイル名に時間がかかれば、それはうまくいきません、そうですか? – Maxischl

    +1

    '$ users_files = glob( 'user_id_#1#_profilepic _#*。*'); ' – AbraCadaver

    答えて

    0

    あなたは、ディレクトリ内のファイル数(ユーザーが自分の写真を削除することができた場合にはお勧めしません)だけ増加することができます

    $total_files = count(glob("./*",GLOB_BRACE)); // count files in directory 
    echo $total_files; 
    

    OR:

    あなたが数を記録したテキストファイルを使用します。 ユーザーがファイルをアップロードする: テキストファイルで現在の番号を取得 - > +1を追加してこの番号でファイル名を変更 - >新しい番号をtxtファイルに記録します。

    最良の方法は、データベースレコードの一意のIDである必要がありますが、DBを使用しないことがあります。

    私はあなたを助けてくれることを願っています。

    楽しい一日を!

    +0

    感謝します。私はそれについて考えましたが、すでに言及しました。ユーザーがファイルを削除すると、システムは次回のアップロードで破棄されます。だから私はそれを使用することはできません.. 私は今日のテキストthingythingについて読んだが、それはすべてのユーザーとすべての画像の種類(プロフィール画像、ブログ画像、投稿写真など)右?それは私にとっても賢明な方法ではないようです。 – Maxischl

    +0

    たぶんあなたが "カウント(グロブ(...)システムを使用して、名前がすでにscandir()関数で使用されているかどうかを確認することができます) – x2aces

    +0

    私のpreviouコメント申し訳ありません、それは私の初めてのstackoverflowで、 ^^ – x2aces

    関連する問題