文件上载在PHP4上工作,但不在PHP5上工作
我有一个本地安装的应用程序(PHP4/MySQL),它工作得非常好。自从我将它移动到实时安装(PHP5/MySQL)后,除了问题之外,我什么都没有!我在没有打开全局变量的情况下修复了所有全局变量问题(引导我学习PDO,所以这不是一件坏事!),所以我唯一的问题是文件上传。我尝试了对$\u文件进行isset测试,看起来变量从未设置过?有什么想法吗 以下是表格数据:文件上载在PHP4上工作,但不在PHP5上工作,php,mysql,file-upload,Php,Mysql,File Upload,我有一个本地安装的应用程序(PHP4/MySQL),它工作得非常好。自从我将它移动到实时安装(PHP5/MySQL)后,除了问题之外,我什么都没有!我在没有打开全局变量的情况下修复了所有全局变量问题(引导我学习PDO,所以这不是一件坏事!),所以我唯一的问题是文件上传。我尝试了对$\u文件进行isset测试,看起来变量从未设置过?有什么想法吗 以下是表格数据: <form enctype="multipart/form-data" method="post" action="sc
<form enctype="multipart/form-data" method="post" action="script_add_product.php" >
<input class="cp_forms_upload" type="file" name="full_image" />
<input class="cp_formsButton" type="submit" name="submit_button" value="Add Product" /></form>
下面是PHP:
$full_image_url = $_FILES["full_image"]["name"];
if ((($_FILES["full_image"]["type"] == "image/gif")
|| ($_FILES["full_image"]["type"] == "image/jpeg")
|| ($_FILES["full_image"]["type"] == "image/pjpeg")
|| ($_FILES["full_image"]["type"] == "image/png"))
&& ($_FILES["full_image"]["size"] < 400000))
{
if ($_FILES["full_image"]["error"] > 0)
{
echo "Return Code: " . $_FILES["full_image"]["error"] . "<br />";
}
else
{
echo "Upload: " . $_FILES["full_image"]["name"] . "<br />";
echo "Type: " . $_FILES["full_image"]["type"] . "<br />";
echo "Size: " . ($_FILES["full_image"]["size"] / 1024) . " Kb<br />";
echo "Temp file: " . $_FILES["full_image"]["tmp_name"] . "<br />";
if (file_exists("../Uploads/" . $_FILES["full_image"]["name"]))
{
echo $_FILES["full_image"]["name"] . " already exists. ";
}
else
{
move_uploaded_file($_FILES["full_image"]["tmp_name"],
"../Uploads/" . $_FILES["full_image"]["name"]);
echo "Stored in: " . "../Uploads/" . $_FILES["full_image"]["name"];
echo "<br /><br /><br />" . $full_image_url;
}
}
}
else
{
echo "Invalid file";
}
$full\u image\u url=$\u文件[“full\u image”][“name”];
如果(($_文件[“完整图像”][“类型”]=“图像/gif”)
||($_文件[“完整图像”][“类型”]=“图像/jpeg”)
||($_文件[“完整图像”][“类型”]=“图像/pjpeg”)
||($_文件[“完整图像”][“类型”]=“图像/png”))
&&($_文件[“完整图像”][“大小”]<400000))
{
如果($_文件[“完整图像”][“错误”]>0)
{
回显“返回代码:”.$\u文件[“完整图像”][“错误”]。“
”;
}
其他的
{
echo“上传:.”文件[“完整图像”][“名称”]。“
”;
回显“类型:”.$\u文件[“完整图像”][“类型”]。“
”;
回显“大小:”($_文件[“完整图像”][“大小”]/1024)。“Kb
”;
回显“临时文件:.”文件[“完整图像”][“tmp\U名称”]。“
”;
如果(文件存在(“../Uploads/”$\u文件[“完整图像”][“名称”]))
{
echo$\u文件[“完整图像”][“名称”]”已存在。“;
}
其他的
{
移动上传的文件($文件[“完整图像”][“tmp文件名”],
“./上传/”$_文件[“完整图像”][“名称”]);
echo“存储在:”.“./Uploads/”$\u文件[“完整图像”][“名称”];
回显“
”。$full\u image\u url;
}
}
}
其他的
{
回显“无效文件”;
}
谢谢大家:)如果
上传的文件设置为On
,请检查php.ini
;是否允许HTTP文件上载。
; http://ph .net/文件上载HTTP文件上载。
; http://php.net/file-uploads
文件上传=打开
请参见php.ini
config
;;;;;;;;;;;;;;;;
; 文件上传;
;;;;;;;;;;;;;;;;
; 是否允许HTTP文件上载。
; http://php.net/file-uploads
文件上传=打开
; HTTP上载文件的临时目录(如果不是,将使用系统默认值
;具体说明)。
; http://php.net/upload-tmp-dir
upload_tmp_dir=“…../tmp”
; 上载文件允许的最大大小。
; http://php.net/upload-max-filesize
上载\u最大\u文件大小=128M
此外,它还可能有用php.ini中的内存限制
和最大执行时间
配置参数。
更多:
确保文件夹“./Uploads/”
存在,并且有权在apache/nginx工作(www_data
或类似文件)下为用户进行写入操作。这可能是问题吗?本节中另加一个“(”括号:
if (($_FILES["full_image"]["type"] == "image/gif")
|| ($_FILES["full_image"]["type"] == "image/jpeg")
|| ($_FILES["full_image"]["type"] == "image/pjpeg")
|| ($_FILES["full_image"]["type"] == "image/png"))
&& ($_FILES["full_image"]["size"] < 400000))
if($_文件[“完整图像”][“类型”]=“图像/gif”)
||($_文件[“完整图像”][“类型”]=“图像/jpeg”)
||($_文件[“完整图像”][“类型”]=“图像/pjpeg”)
||($_文件[“完整图像”][“类型”]=“图像/png”))
&&($_文件[“完整图像”][“大小”]<400000))
美元POST输出的内容是什么?变量转储($\u POST);您确定要上载的图像大小不超过upload_max_filesize值吗?好的,我测试了大小仅为20kb的图像。上传最大文件大小为16M。Bono,我如何进行var_转储?我想@Bono考虑了var_转储($\文件)。您当前的php5版本是什么?最新版本5.4.5?你用的是suhosin吗?@mrock-version是5.2.17,但我用的是第三方托管。不确定他们是否在使用suhosin?嗨,这是phpinfo()的结果,如果这有帮助的话?上传\u最大\u文件大小16M 16M上传\u tmp\u目录无值无值我测试代码。它有效!。。所以我认为这是没有许可证或没有这样的文件夹。如果可能的话,查看日志会很有帮助。如果无法查看日志,只需插入var_dump(…)代码>在每个步骤上。或echo'xbcvxcvx';死亡
要查看错误发生的位置,您还可以设置自己的错误处理程序(如果尚未使用),自己将错误记录到某个文件…-为了未来。我会在任何一行上尝试错误处理,看看是否可以缩小范围。该文件夹存在,测试时设置了$u文件,尝试直接链接(…etc)到该文件夹时运气不佳。我想这一定是服务器的问题,但是如果Wordpress可以在上面运行…@Nikola K,这个文件夹是存在的。不确定CHMOD是否适用于Windows Server-无论如何都尝试过:500“SITE CHMOD 755 upload”:命令未被理解,phpinfo()告诉我文件上传已打开?@Sarke我在回答中更正了它。我指的是发布的一篇文章。检查他所说的代码supplied@asprin我使用的是这里的代码,具有讽刺意味的是,当我将代码放入PHP IDE时,它告诉我这行代码有问题://&&in_array($extension,$allowedExts))在检查扩展时。所以我对它进行了评论,但对最终结果没有异议。@asprin他的括号匹配,你的括号不匹配。请注意,它是几个OR,然后是and,OR被分组在一起。请参见第二行至最后一行有一个额外的闭合括号来闭合OR组。