Только переменные могут быть переданы по ошибке ссылки - PullRequest
8 голосов
/ 20 июня 2011

Произошла ошибка в сценарии '/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,, хотя я получаю фатальную ошибку, которую я не могу понять.Кто-нибудь, кто имеет опыт с этим и пролил свет или указывает мне правильное направление?

Ответы [ 2 ]

10 голосов
/ 20 июня 2011

Вам нужно сделать результат функции explode () переменной, прежде чем передавать его на

$var = explode('.',$filename);
$ext = strtolower(array_pop($var));
7 голосов
/ 20 июня 2011

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

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

...