2012-04-21 3 views
1

티끌 추적 코드로 // 입력 : $filefopen의 자원이기 때문에PHP : Resouce의 문자열

$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

를 얻을. php://input을 두 번 읽지 못하면 어떻게 리소스와 문자열을 가질 수 있습니까?


UPDATE는

나는 이것을 시도 :

$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 

감사합니다! getimagesize()는 문자열 파일 이름이 아니라 자원을 받아

답변

1

때문에, 당신은 당신이 getimagesize()에 전달할 수있는 이름을 가진 임시 파일을 만들 수 tempnam()를 사용해야합니다.

$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); 

이것은 당신이 사용자에 R/W 권한을 가지고 디렉토리를 변경할 수없는 경우 PHP를 실행하는 사용자가 작성하고 디렉토리 /var/tmp에 읽기 권한을 가지고 있지만 가정합니다.

1

tmpfile() 대신 임시 파일을 생성하려면 tempnam()을 사용하십시오. ;`초 PARAM로`$의 img`와

$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); 
+0

왜'적인 tempnam() : 그럼 당신은 당신이 getimagesize()에 전달할 수있는 파일 경로가? –

+0

두 번째 시도 및 오류로 내 대답을 업데이트합니다. –

+0

@GabrielSantos 죄송합니다. "img"문자열이어야합니다. – DaveRandom