2010-11-11 83 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

相關問題