web-dev-qa-db-ja.com

警告:filesize():img.jpgの統計が失敗しました

画像のファイルサイズを取得しようとしていますが、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 を見つけましたが、問題は解決しませんでした。どんな助けでも大歓迎です!

7
yuval

$ _FILES配列の['name']は、CLIENTマシン上のファイルの名前です。これは単なる情報であり、サーバーに実際に保存されているものとはまったく関係ありません。アップロードが完了した後、['tmp_name']を確認する必要があります。これは、PHPがファイルをサーバーに一時的に保存した場所です。

$path = $_FILES['profile']['tmp_name'];
                          ^^^^^^^^^^^^
7
Marc B

$_FILES['profile']['name']ファイルの名前だけを持っています..アクセスする必要があります

$_FILES['profile']['tmp_name'] 

システム上のファイルの一時パスが表示されます。ここに http://php.net/manual/en/reserved.variables.files.php

また、あなたはファイルのサイズにアクセスできます

$_FILE['profile']['size']
4
geekman
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'];

はサーバー上の有効なファイルの場所を指しているのではなく、次のいずれかです。

  1. (サーバーではなく)クライアントPC上のファイルパス。その場合は、直接アクセスできないことを確認してください。
  2. 文字列ではないもの
  3. しかし、それはnullではありません(そうしないと、単純にnullが返されます(最初の例を参照)

次回は有効なPHPコードを投稿してください。

ルカ

[〜#〜]更新[〜#〜]

Marc Bが提案したように、$_FILES['profile']['tmp_name'];を使用する必要があります

2
Luca Abbati