2013-08-19 7 views
0

나는 Fine-Uploader을 PHP와 함께 사용하고 있으며 잘못된 것이 발생했습니다. 내가 백엔드에 stream_copy_to_stream()를 사용하는 경우, 그것은 항상 0stream_copy_to_stream() 항상 0을 반환합니다.

여기 백엔드에서 내 코드의 반환

private function upload_file($file_name, $tmp_name) 
{ 
    $result = array(
      'is_successful' => true, 
      'extra_message' => '' 
     ); 

    $target_path = $this->get_target_file_path($file_name, $tmp_name); 
    move_uploaded_file($tmp_name, $target_path); 
    $result['is_successful'] = $this->handle_upload_request($target_path); 
    if ($result['is_successful']) { 
     $result['extra_message'] = $target_path; 
    } else { 
     $result['extra_message'] = 'Unknown error occured.<br />'; 
    } 

    return $result; 
} 

private function handle_upload_request($path) 
{ 
    $input = fopen("php://input", "r"); 
    $temp = tmpfile(); 
    $real_size = stream_copy_to_stream($input, $temp); 
    fclose($input); 

    echo $real_size; 
    if ($real_size != $this->get_size()){    
     return false; 
    } 

    $target = fopen($path, "w");   
    fseek($temp, 0, SEEK_SET); 
    stream_copy_to_stream($temp, $target); 
    fclose($target); 

    return true; 
} 

그러나, 이상하게도 0으로 항상 동일한 $의 real_size, 파일을 업로드 할 수 있습니다 때로는 성공적이지만 때로는 그렇지 않습니다.

아마도 Linux의 허가 때문일 수 있습니다. 왜냐하면 파일을 업로드 할 때 파일의 mod는 644 (하지만 644이면 충분하다고 생각하기 때문입니다.) 그리고이 문제는 Windows에도 있습니다.

무엇이 문제입니까?

+0

어떻게'$ path'가 정의 되었습니까? –

+0

물론. 이 함수는 다른 함수에 의해 호출되며 경로는 파일을 저장할 대상 경로입니다. –

+0

경로는 무엇입니까? –

답변

1

php://input을 사용하지 않아야합니다. php://input은 원시 요청 본문에 액세스하는 데 사용됩니다. 다중 파트로 인코딩 된 요청의 경우 비어 있습니다. 파인 업 로더가 전송 한 모든 업로드 요청은 기본적으로 여러 부분으로 인코딩됩니다. 대신, 당신은 슈퍼 글로벌을 $_FILES 사용하여 요청과 관련된 파일을 잡아야합니다. Fine Uploader server Github repo에 더 많은 것을 보여줄 functional PHP example이 있습니다.

요청을 처리하기 위해 PHP 코드를 직접 작성해야한다면 기본적으로 모든 업로드 요청이 기본적으로 멀티 파트로 인코딩되었음을 알리는 traditional server-side documentation for Fine Uploader을 먼저 읽어야합니다. 이것은 IE9 이전의 MPE 요청에있는 파일을 IE9 이전 버전에서는 파일을 통해 업로드 할 수 없으므로 필요에 따라 브라우저 간 업로드 요청을 처리하기가 더 쉽도록 기본값으로 설정됩니다. 아약스 요청 (XHR2).

+0

이 코드를 작성하면 기능적 PHP 예제 [https://github.com/Widen/fine-uploader-server/ tree/master/php]와 $ _FILES를 사용하여 파일 정보를 얻었고 XHR2를 사용할 수 없도록 IE 8에서 경쟁력을 갖추어야합니다. –

+0

당신이 말하는 것이 확실하지 않습니다. 당신이 질문에 게시 한 코드가 잘못되었고,'php : // input'을 사용하면 문제가 생길 수 있습니다. 모든 브라우저에 대한 요청과 관련된 파일에 접근하려면'$ _FILES '를 사용하십시오. –

+0

fopen ($ _ FILES [ "fileUploaderfile"] [ 'tmp_name'], 'r');을 사용해야한다는 것을 의미합니까? 그것이 말합니다 : 스트림을 열지 못했습니다 : 아니요 그런 파일이나 디렉토리. 그러나 파일이 성공적으로 업로드되었습니다. –

관련 문제