2011-06-20 23 views
8

Một lỗi xảy ra trong kịch bản '/usr/local/apache2/htdocs/read.php' trên đường dây 197: Chỉ có biến nên được thông qua tham khảo (dòng 196 là $ext = strtolower(array_pop(explode('.',$filename)));)Chỉ Các biến có thể được thông qua bởi lỗi tham chiếu

if(!function_exists('mime_content_type')) { 

    function mime_content_type($filename) { 

     $mime_types = array(

      'txt' => 'text/plain', 
      'htm' => 'text/html', 
      'html' => 'text/html', //ETC 

     ); 

     $ext = strtolower(array_pop(explode('.',$filename))); 
     if (array_key_exists($ext, $mime_types)) { 
      return $mime_types[$ext]; 
     } 
     elseif (function_exists('finfo_open')) { 
      $finfo = finfo_open(FILEINFO_MIME); 
      $mimetype = finfo_file($finfo, $filename); 
      finfo_close($finfo); 
      return $mimetype; 
     } 
     else { 
      return 'application/octet-stream'; 
     } 
    } 
} 

Tôi đang sử dụng tập lệnh nhỏ này từ http://php.net/manual/en/function.mime-content-type.php, mặc dù tôi đang gặp phải lỗi nghiêm trọng nhưng dường như tôi không thể tìm ra. Có ai có kinh nghiệm với điều này và làm sáng tỏ một số hoặc chỉ cho tôi đi đúng hướng không?

Trả lời

10

Bạn cần phải thực hiện là kết quả của explode() một biến trước khi bạn vượt qua nó trên

$var = explode('.',$filename); 
$ext = strtolower(array_pop($var)); 
+0

@Dendromaniac Nếu đó là cùng một vấn đề và giải pháp này không làm việc cho bạn, hãy tạo ra một câu hỏi mới với bạn bao gồm mã để mọi người có thể xem. – JohnP

+0

Tôi đã phạm sai lầm và đã chỉnh sửa bản sao sai của mime-lib.php xấu của tôi. – Dendromaniac

7

Đó là mã được đi qua các kết quả của explode chức năng (một giá trị) vào array_pop, nhưng array_pop hy vọng một mảng biến (bằng cách tham chiếu), không phải là một giá trị. (Các & trong tờ khai array_pop cho chúng ta biết rằng nó đang mong đợi để chấp nhận một reference.)

Bạn có thể sửa chữa nó bằng cách sử dụng một biến mảng để lưu trữ kết quả của explode, và sau đó đi qua đó vào array_pop.

Các vấn đề liên quan