Php 脚本可以在计算机上工作,但不能在服务器上工作?

Php 脚本可以在计算机上工作,但不能在服务器上工作?,php,Php,奇怪的问题。。。我不知道为什么这在我的服务器上不起作用 由于某种原因,IF不起作用 让我困惑的主要问题是检查文件扩展名的问题。即使由于某种原因不匹配,它也会在我的服务器而不是我的计算机上返回TRUE if (isset($_POST['submit'])) { $sizelimit = 50; //File size limit in KB. $destination_folder = 'images/user_avatars/temp/'; $fileurl

奇怪的问题。。。我不知道为什么这在我的服务器上不起作用

由于某种原因,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);
    }
}
这就是脚本不可靠的原因。改用这个:

if ($filetype == "gif" || $filetype == "png" || $filetype == "jpg" || $filetype == "jpeg" )
或者更好:

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

没有一个口译员能聪明地代替你思考。你需要准确地告诉它你的意思。

这两种方法都不应该奏效。您现在正在评估的是:

if ($filetype == "gif" || "png" == true || "jpg" == true || "jpeg" == true) ...
“png”总是==真,“jpg”和“jpeg”也是如此

应该是:

if ($filetype == "gif" || $filetype == "png" || $filetype == "jpg" || $filetype == "jpeg") ...
或者在数组中使用
实际上更清晰

if ($filetype == "gif" || "png" || "jpg" || "jpeg") {
你做错了。了解PHP中的运算符

正确的方法是:

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

我不是PHP大师,但我很确定这是错误的:

if ($filetype == "gif" || "png" || "jpg" || "jpeg")
几乎可以肯定的是,
==
操作符的边界比
|
更紧密。换句话说,您拥有的是:

IF
   $filetype == "gif" 
OR
   "png"
OR
   "jpg"
OR
   "jpeg"
我将进一步假设一个非空字符串在布尔上下文中被强制为
true
,因此后者或条件总是true


现在,这也应该在您的计算机上显示这种行为,因此我建议您可能已将不同的文件上载到您在本地测试的文件。这可以归结为浏览器缓存,多个工作目录,任何类似的东西。从经验来看,这非常容易做到…

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

基本上服务器是计算机。。。您也可以在自己的计算机上安装支持PHP的服务器。
IF
   $filetype == "gif" 
OR
   "png"
OR
   "jpg"
OR
   "jpeg"