画像のファイルサイズを取得しようとしていますが、Warning: filesize(): stat failed for img.jpg
を取得し続けます
これは私がやったことです:
_$path = $_FILES['profile']['name'];
$path = iconv('UTF-8', 'ISO-8859-1',$path);
if (!in_array(pathinfo($path,PATHINFO_EXTENSION),$allowed)) {
return "file";
} elseif (filesize($path)>(1024*600))
_
ファイル拡張子は問題なく取得できますが、filesize()
が機能しないようです。私は少し読んでいて this を見つけましたが、問題は解決しませんでした。どんな助けでも大歓迎です!
$ _FILES配列の['name']
は、CLIENTマシン上のファイルの名前です。これは単なる情報であり、サーバーに実際に保存されているものとはまったく関係ありません。アップロードが完了した後、['tmp_name']
を確認する必要があります。これは、PHPがファイルをサーバーに一時的に保存した場所です。
$path = $_FILES['profile']['tmp_name'];
^^^^^^^^^^^^
$_FILES['profile']['name']
はファイルの名前だけを持っています..アクセスする必要があります
$_FILES['profile']['tmp_name']
システム上のファイルの一時パスが表示されます。ここに http://php.net/manual/en/reserved.variables.files.php
また、あなたはファイルのサイズにアクセスできます
$_FILE['profile']['size']
echo "---- NULL ---------------\n";
$path = null;
echo "File size is: " . filesize($path) . "\n";
echo "---- FILE EXISTS --------\n";
$path = '/home/luca/Scrivania/file_that_exists.jpg';
echo "File size is: " . filesize($path) . "\n";
echo "---- FILE NOT EXISTS ----\n";
$path = 'file/does/not/exists.jpg';
echo "File size is: " . filesize($path) . "\n";
結果として:
---- NULL ---------------
File size is:
---- FILE EXISTS --------
File size is: 78953
---- FILE NOT EXISTS ----
Warning: filesize(): stat failed for file/does/not/exists.jpg in /home/luca/Scrivania/test.php on line 13
Call Stack:
0.0001 642120 1. {main}() /home/luca/Scrivania/test.php:0
0.0002 642448 2. filesize() /home/luca/Scrivania/test.php:13
これは、変数が
$_FILES['profile']['name'];
はサーバー上の有効なファイルの場所を指しているのではなく、次のいずれかです。
null
が返されます(最初の例を参照)次回は有効なPHPコードを投稿してください。
ルカ
[〜#〜]更新[〜#〜]
Marc Bが提案したように、$_FILES['profile']['tmp_name'];
を使用する必要があります