Только переменные могут передаваться по ошибке

Произошла ошибка в сценарии «/usr/local/apache2/htdocs/read.php» в строке 197: только переменные должны передаваться по ссылке (строка 196 – это $ext = strtolower(array_pop(explode('.',$filename))); )

 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'; } } } 

Я использую этот маленький скрипт из http://php.net/manual/en/function.mime-content-type.php , хотя я получаю фатальную ошибку, которую я не могу понять. Кто-нибудь, у кого есть опыт с этим, и пролил свет или указал мне в правильном направлении?

Вы должны сделать результат explode () переменной, прежде чем передавать ее

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

Этот код передает результат функции array_pop (значение) в array_pop , но array_pop ожидает переменную массива (по ссылке), а не значение. (Объявление & в объявлении array_pop сообщает нам, что оно ожидает принятия ссылки .)

Вы можете исправить это, используя переменную массива, чтобы сохранить результат explode , а затем передать это в array_pop .