1

次のコードをホイットします。

$file = fopen('php://input', 'r');
$temp = tmpfile();
$imageSize = stream_copy_to_stream($file, $temp);
$imageDimensions = getimagesize($file); // Error here
$imageInfos = pathinfo($_GET['selected-image']);

このエラーが発生します getimagesize() expects parameter 1 to be string, resource given

$fileのリソースだからですfopenphp://input2回読み取れない場合、リソースと文字列を取得するにはどうすればよいですか?


アップデート

私はこれを試しました:

$file = fopen('php://input', 'r');
$tempName = tempnam(sys_get_temp_dir(), '.upload');
$imageSize = fwrite(fopen($tempName, 'w+'), stream_get_contents($file));
$imageDimensions = getimagesize($tempName);
$imageInfos = pathinfo($_GET['selected-image']);

// Unlinks and other stuffs

エラー:

Notice: getimagesize() [function.getimagesize]: Read error! in 

ありがとう!

4

2 に答える 2

1

getimagesize()リソースではなく文字列ファイル名のみを受け入れるためtempnam()、に渡すことができる名前で一時ファイルを作成するためにを使用する必要がありますgetimagesize()

$file = fopen('php://input', 'r');
$tempName = tempnam('/var/tmp', 'img_');
$temp = fopen($tempName, 'w');
$imageSize = stream_copy_to_stream($file, $temp);
fclose($temp);
$imageDimensions = getimagesize($tempName);

これは、PHPを実行しているユーザーがディレクトリへの書き込みおよび読み取り権限を持っていることを前提としてい/var/tmpますが、そうでない場合は、ユーザーがr/w権限を持っているディレクトリに変更できます。

于 2012-04-21T20:12:55.240 に答える
1

tempnam()の代わりに、一時ファイルを生成するために使用しますtmpfile()。次に、渡すことができるファイルパスがありますgetimagesize()

$file = fopen('php://input', 'r');
$tempname = tempnam('.', 'img');
$tempfile = fopen($tempname, 'w+');
$imageSize = stream_copy_to_stream($file, $tempfile);
$imageDimensions = getimagesize($tempname);
$imageInfos = pathinfo($_GET['selected-image']);

// At the end of the script, you need to remember to...
fclose($tempfile);
unlink($tempname);
于 2012-04-21T20:16:52.883 に答える