只有变量可以通过引用错误传递

时间:2011-06-20 10:50:52

标签: php arrays reference mime pop

第197行的脚本'/usr/local/apache2/htdocs/read.php'发生错误:只应通过引用传递变量(第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 个答案:

答案 0 :(得分:10)

在将变量传递给

之前,你需要将explode()的结果变为变量
$var = explode('.',$filename);
$ext = strtolower(array_pop($var));

答案 1 :(得分:7)

该代码将explode函数(值)的结果传递给array_pop,但array_pop需要数组变量(通过引用),不是一个价值。 (&声明中的array_pop告诉我们它希望接受reference。)

您可以使用数组变量来存储explode的结果,然后将其传递到array_pop中来修复它。