2010-11-11 78 views
0

奇怪的问题......我不知道为什么这不适用于我的服务器。脚本在计算机上工作,但不是服务器?

由于某些原因,IF不起作用。

令我困惑的主要原因是检查文件扩展名。即使它由于某种原因不匹配,它在我的服务器上返回TRUE,而不是我的电脑。

if (isset($_POST['submit'])) { 

    $sizelimit = 50; //File size limit in KB. 
    $destination_folder = 'images/user_avatars/temp/'; 

    $fileurl = $_POST['avatar_url']; 
    $filetype = substr(strrchr($fileurl,'.'),1); 
    $filename = "user_" . $_SESSION[user_id] . "." . $filetype; 

    $temp = $destination_folder . $filename; 

    if ($filetype == "gif" || "png" || "jpg" || "jpeg") { 

     $file = fopen ($url, "rb"); 
     if ($file) { 
      $newfile = fopen ($temp, "wb"); 
      if ($newfile) { 
       while(!feof($file)) { 
        fwrite($newfile, fread($file, 1024 * 8), 1024 * 8); 
       } 
      } 
     } 

     if (filesize($temp) > 1024 * $sizelimit) { 
      $errors .= "The file size of the image you entered is too large!"; 
     } 
    } else { 
     $errors .= "The URL you entered is not a valid image!"; 
    } 

    if (isset($errors)) { 
     $smarty->assign("error_message", $errors); 
     unlink($temp); 
    } else { 
     $avatar_sql = " 
      UPDATE 
       users 
      SET 
       user_avatar = '$filename' 
      WHERE 
       user_id = '$_SESSION[user_id]' 
     "; 
     $avatar_query = @mysqli_query ($db_connect, $avatar_sql); 

     fclose($file); 
     fclose($newfile); 
    } 
} 

回答

6
if ($filetype == "gif" || "png" || "jpg" || "jpeg") 

这就是为什么你的脚本是不可靠的。使用这个来代替:

if ($filetype == "gif" || $filetype == "png" || $filetype == "jpg" || $filetype == "jpeg") 

甚至更​​好:

if (in_array($filetype, array("gif", "png", "jpg", "jpeg)) 

没有一个解释器将是足够聪明,想到而不是你。你需要精确地告诉它你的意思。

1

它不应该工作。什么你现在正在评估是:

if ($filetype == "gif" || "png" == true || "jpg" == true || "jpeg" == true) ... 

“PNG” 始终是== true,所以是 “JPG” 和 “JPEG”。

它应该是:

if ($filetype == "gif" || $filetype == "png" || $filetype == "jpg" || $filetype == "jpeg") ... 

或者使用in_array实际上是清晰的。

1
if ($filetype == "gif" || "png" || "jpg" || "jpeg") { 

你做错了。阅读PHP中的运算符。

较短的方式来做到这一点是:

if(in_array($filetype, array("gif","png","jpg","jpeg")) { 
1

我不是PHP大师,但我敢肯定,这是错误的:

if ($filetype == "gif" || "png" || "jpg" || "jpeg") 

这几乎是肯定的如果==运营商比||更加紧密。换句话说,你所拥有的是:

IF 
    $filetype == "gif" 
OR 
    "png" 
OR 
    "jpg" 
OR 
    "jpeg" 

,我更要假定一个非空字符串被在布尔环境裹挟true,因此后者OR条件总是为真。

现在,这个应该已经在你的机器上展现了这种行为,所以我建议你可能已经上传了一个不同的文件给你在本地测试的那个文件。这可能是浏览器缓存,多个工作目录,任何类似的事情。从经验来看,这是令人惊讶的容易做...

0

PHP只能在启用PHP的服务器上工作,PHP不会在您的计算机上运行。
PHP是服务器端语言!

+1

基本上服务器*是*计算机......您也可以在自己的计算机上安装启用PHP的服务器。 – pimvdb 2011-05-22 17:40:39

相关问题