使用以下代码:
$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
谢谢!
答案 0 :(得分: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权限的目录。
答案 1 :(得分: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);