php文件在将项目上传到web服务器后无法加载某些图像


php file fails to load certain images after uploading the project to a web server

在将项目上传到web服务器(godaddy.com)后,我偶然发现了以下问题:由于某种未知原因,img.php无法加载一些随机格式的图像(jpg/png)。我认为一切都是以正确的方式完成的,因为在我的本地机器上一切都很好。我使用WinSCP上传文件。在(ftp)上传过程中,我没有收到任何错误。

我没有从php或浏览器控制台收到任何错误或警告(这就是我如此困惑的原因)。

是我做错了什么(我不知道)还是应该联系godaddy.com?

img.php代码:

<?php
#   FILE USED TO LOAD IMAGES.
if(isset($_GET['type'],$_GET['f'])){
    #   ATTEMPT TO LOCATE FILE
    $dir=array();
        $dir['path']='src/'.$_GET['type'].'/';
        $dir['files']=scandir($dir['path']);
    foreach($dir['files'] as$i=>$val){
        $fNameArr=explode('.',$val);
        if($fNameArr[0]==$_GET['f'] && pathinfo($dir['path'].$val,PATHINFO_EXTENSION)==$_GET['type']){
            #   FILE FOUND. SEND RIGHT HEADER.
            switch(pathinfo($dir['path'].$val,PATHINFO_EXTENSION)){
                case'png':
                    header('Content-type:image/png', true);
                    break;
                case('jpg' OR 'jpeg'):
                    header('Content-type:image/jpg', true);
                    break;
                case'gif':
                    header('Content-type:image/gif', true);
                    break;
            }
            require_once($dir['path'].$val);
        }
    }
    unset($dir);
}else{
    #   SELF EXPLANATORY ERROR
    die('ERROR: dependencies missing!');
}
?>

项目的实时版本:www.ekodom.com/v3/(警告:CSS尚未完成。在某些浏览器中可能无法正常工作)

附加信息:显然,通过css.php加载的一些.css文件也是如此,其工作方式类似(加载.css头并包括.css文件);

这是完全不正确的:

  case('jpg' OR 'jpeg'):

case值不能是表达式。这个or语句实际上相当于

  case true:

你应该有

  case 'jpg':
  case 'jpeg':

相反。

switch($foo) {
    case 'bar':
       ...
    case 'baz':

实际上相当于

 if ($foo == 'bar') {
      ....
 } else if ($foo == 'baz') {
       ....
 }

对于你的or版本,它将是

 if ($foo == ('A' or 'B')) {

它编译成

 if ($foo == true) {

然后到

 if ($foo) 

你没有做错任何事。实际上,具有自己PHP设置的服务器有一种不同的模式,可以将带有图像类型标题的图像直接输出到浏览器中。我在2-3种不同类型的主机上遇到过同样的问题,因为相同的代码适用于特定的主机,而其他主机则没有。

起初我不知道为什么,但后来我发现这取决于这些主持人在幕后完成的特定图像功能和设置。它还涉及到他们使用的编码类型,以及他们与输出缓冲区一起使用的输出流模式。

如果你想坚持这个主机,你最好联系他们的技术团队。否则,如果你可以移动到它可以工作的主机,例如,我所有与图像相关的代码,包括调整大小和编辑,都可以用Hostinger很好地工作。

即使线程已经死了,我也会发布这个解决方案供以后搜索。今天我再次编辑代码,并尝试了一种不同的方法。它与我以前的代码类似,但我使用了file_get_contents()函数,而不是requireonce()/request函数。

以下是img.php:的总体结果/代码

<?php
#   FILE USED TO LOAD IMAGES.
if(isset($_GET['type'],$_GET['f'])){
    #   ATTEMPT TO LOCATE FILE
    $dir=array();
        $dir['path']='src/'.$_GET['type'].'/';
        $dir['files']=scandir($dir['path']);
    foreach($dir['files'] as$key=>$val){
        $fNameArr=explode('.',$val);
        if($fNameArr[0]==$_GET['f'] && $_GET['type']==pathinfo($dir['path'].$val,PATHINFO_EXTENSION)){
            #   FILE FOUND. SEND RIGHT HEADER AND INCLUDE FILE CONTENTS
            switch(pathinfo($dir['path'].$val,PATHINFO_EXTENSION)){
                case('png'):
                    header('Content-type:image/png', true);
                    break;
                case('jpg'):
                    header('Content-type:image/jpg', true);
                    break;
                case('gif'):
                    header('Content-type:image/gif', true);
                    break;
                default:
                    die('ERROR: invalid file type!');
                    break;
            }
            echo file_get_contents($dir['path'].$val);
        }
    }
}else{
    #   SELF EXPLANATORY ERROR
    die('ERROR: dependencies missing!');
}
?>