2013-10-01 6 views
0

22M docx 파일이 있고 PHP에서 base64_encode() 함수를 사용하여 인코딩하려고합니다. 그러나이 함수를 실행 한 후에는 항상 NULL 값을 반환합니다. 이 기능의 한계 파일 크기 나 조건이 있습니까? 내 코드 :왜 base64_encode()가 null을 반환합니까?

$handle = fopen($fullpathfile, "rb"); 
$imagestr = base64_encode(fread($handle, filesize($fullpathfile))); 
fclose($handle); 
+1

무엇 FREAD 수익을합니까? 당신은 그것이 docx 파일인지, 아니면 실제로 테스트했는지 알고 있습니까? – GolezTrol

+5

['base64_encode'] (http://php.net/base64_encode)는'null '을 반환하지 않습니다. 그러나 실패하면'false'를 반환합니다. – Gumbo

+0

22M은 대용량 파일입니다. 아마도 어딘가에 "메모리 부족"상태가 될 수 있습니다. –

답변

0

보십시오이 코드

$fh = fopen($fullpathfile, 'rb'); 


$cache = ''; 
$eof = false; 

while (1) { 

    if (!$eof) { 
     if (!feof($fh)) { 
      $row = fgets($fh, 4096); 
     } else { 
      $row = ''; 
      $eof = true; 
     } 
    } 

    if ($cache !== '') 
     $row = $cache.$row; 
    elseif ($eof) 
     break; 

    $b64 = base64_encode($row); 
    $put = ''; 

    if (strlen($b64) < 76) { 
     if ($eof) { 
      $put = $b64."\n"; 
      $cache = ''; 
     } else { 
      $cache = $row; 
     } 

    } elseif (strlen($b64) > 76) { 
     do { 
      $put .= substr($b64, 0, 76)."\n"; 
      $b64 = substr($b64, 76); 
     } while (strlen($b64) > 76); 

     $cache = base64_decode($b64); 

    } else { 
     if (!$eof && $b64{75} == '=') { 
      $cache = $row; 
     } else { 
      $put = $b64."\n"; 
      $cache = ''; 
     } 
    } 

    if ($put !== '') { 
     echo $put; 

    } 
} 


fclose($fh); 
+0

이 코드의 작동 방식을 설명하는 코드에 주석을 제공하십시오. – Martijn

+0

반복 당 최대 57 바이트를 읽지 않는 이유는 무엇입니까? – Gumbo

관련 문제