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是 的资源fopen。如果我不能读php://input两次,我怎么能有一个资源和一个字符串?


更新

我试过这个:

$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 回答