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