PHP从webroot外部提供图像

时间:2017-01-13 10:01:39

标签: php image header readfile

今天我在我的网站上的function.php上工作,该区域与提供图像无关。我有一个php脚本,它从webroot外部获取图像,并暂时基于$ _GET为它们提供服务。一分钟它正在工作,然后下一个它没有。我不知道发生了什么。我将其归结为MAC Sierra的BS服务器管理,但将所有内容移至LINUX服务器并没有任何区别。

    <?php
    include('includes/functions.php');  
    $path = $privatePath;
    $uid = getUserProfileImage();
    $img = $_GET['img'];    
    $file = $path."/img/users/".$uid."/".$img; 
    $fallback = "img/site/login.png"; 

    //DETERMINE TYPE 
    $var = explode ('.', $img);
    $ext = array_pop($var); 
    $allowed['gif'] = 'image/gif'; 
    $allowed['png'] = 'image/png'; 
    $allowed['jpg'] = 'image/jpeg'; 
    $allowed['jpeg'] = 'image/jpeg'; 

    if(file_exists($file) && $ext != '' && isset($allowed[strToLower($ext)])) { 
        $type = $allowed[strToLower($ext)]; 
    } else { 
        $file = $fallback; 
        $type = 'image/png'; 
    } 

    header('Content-Type: '.$type);
    //header ("Content-Disposition: inline; filename=\"{$img}\");
    header("Content-length: ".(string)(filesize($file)));  
    //echo file_get_contents($file);
    readfile($file); 
    exit(); 

?>

从一分钟到下一分钟,这段代码工作正常。我检查了文件夹的权限,并验证它是否由www-data拥有。 Firefox显示图像有错误。通常,当我在输出缓冲区之前回显某些内容时,我会收到该错误消息。但现在是谁知道是什么原因。

Firefox中的RAW数据输出在读取图像时是这样的:

CgoKCv/Y/+EeQUV4aWYAAElJKgAIAAAADAAAAQMAAQAAAAACAAABAQMAAQAAAAACAAACAQMAAwAAAJ4AAAAGAQMAAQAAAAIAAAASAQMAAQAAAAEAAAAVAQMAAQAAAAMAAAAaAQUAAQAAAKQAAAAbAQUAAQAAAKwAAAAoAQMAAQAAAAIAAAAxAQIAHgA ...

这有点继续。我已经重新保存了图像以及我能想到的其他所有内容。我甚至删除了以前脚本工作时所做的所有工作,没有变化。有人有任何想法吗?或者是否有更多错误我可以记录以查看问题并获得提示?

0 个答案:

没有答案