2

「upload」というフォルダ名に画像をアップロードしています。次に、画像の名前と拡張子を変更しています。デフォルトのタイムゾーンで現在の時刻と日付を取得しています取得した日付と時刻の後に画像拡張子を「jpeg」に設定しようとしていますが、結果が得られませんここにコードを置きます

その時点で画像をアップロードすると、ファイル名は「NEWYORK.JPG」になると思いますが、画像をアップロードした後、ファイル名を「9/10/2012/05:31:15.jpeg」に変更します時刻と日付は、デフォルトのタイムゾーンを設定します。

date_default_timezone_set('Asia/Kolkata');
$imagename = date('d/m/Y-h:i:s', time());
$imagename=basename($imagename,".jpg");
echo $filename = $imagename;
$upload   = $_FILES['ctgimage'];
$target_path = "upload/";

 echo $target_path .= $filename . "." . path_info($upload["name"], PATHINFO_EXTENSION);
  if(move_uploaded_file($upload["tmp_name"],$target_path))
  {
          echo "uploaded successfully";           $cname=$_POST['ctgname'];
          mysql_query("insert into category(ctg_name,ctgimage) 
               values('$cname','$target_path')");

  }
4

4 に答える 4

1

いくつかのエラー

  • そうであってはならpathinfoないpath_info
  • ファイルd-m-Yのフォルダのように有効なファイル名を使用してくださいh.i.s
  • 重複が多すぎる
  • エスケープによる SQL インジェクションの回避

例 :

date_default_timezone_set('Asia/Kolkata');

$target_path = "upload/";
$imageDir = date('d-m-Y', time());
$imageName = date('h.i.s', time());

$upload = $_FILES['ctgimage'];
$uploadExtention = pathinfo($upload["name"], PATHINFO_EXTENSION);

if (! is_dir($target_path . "/" . $imageDir)) {
    mkdir($target_path . "/" . $imageDir);
}

$target_path = "$target_path/$imageDir/$imageName.$uploadExtention";
$cname = mysql_real_escape_string($_POST['ctgname']);

if (move_uploaded_file($upload["tmp_name"], $target_path)) {
    echo "uploaded successfully";

    mysql_query("insert into category(ctg_name,ctgimage)
    values('$cname','$target_path')");
}

PHP ドキュメントmysql_*****

この拡張機能の使用はお勧めできません。代わりに、MySQLi または PDO_MySQL 拡張機能を使用する必要があります。詳細については、MySQL: API ガイドの選択および関連する FAQ も参照してください。この機能の代替手段は次のとおりです。

于 2012-10-09T12:13:42.523 に答える
0

ターゲット ディレクトリが存在する必要があります。

また; 提案としてのみ: Y/m/d/... を使用して、フォルダー構造をソート/トラバース/順序を維持するのに少し良くします。

├── 2011
│   └── 12
│       ├── 03/
│       ├── 07/
│       ├── 13/
│       ├── 16/
│       └── 24/
└── 2012
    ├── 02
    │   ├── 14/
    │   └── 20/
    └── 05
        └── 13/

および/または。すなわち

2012-03-11_13.26.13.jpeg  
2012-03-11_14.26.13.jpeg  
2012-07-14_13.26.13.jpeg

それ以外の:

13-11-2012_13.26.13.jpeg  
14-07-2012_13.26.13.jpeg  
14-11-2012_14.26.13.jpeg

2 つの画像が同じ時刻の場合は、一意の文字列を追加する必要もあります。それ以外move_uploaded_file()の場合は、ターゲット ファイルが存在する場合は上書きします。

また、前述のように、ファイル名にスラッシュを含めることはできません。これは、フォルダー構造の一部であると解釈しました。偽造したい場合は、Unicode 0x206F "⁄" を使用できますが、お勧めしません。

于 2012-10-09T12:18:09.327 に答える
0

日付ではなく、UNIX タイムスタンプを使用してファイルに名前を付けることをお勧めします。さらに、ファイル名に「/」などの文字が含まれることをOSが許可しているかどうかはわかりません

于 2012-10-09T12:14:38.570 に答える
0

9/10/2012/05:31:15.jpeg保存しようとするとPHPがスラッシュをフォルダーディレクトリとして解釈するため、ファイルに名前を付けることはできないと思います。

私が間違っている場合は、私を修正してください。

于 2012-10-09T12:15:53.547 に答える