本地XAMPP可正常传图,GoDaddy服务器无法上传求助
解决GoDaddy主机上PHP图片上传失败的问题
我完全理解你现在的困扰——本地XAMPP环境下图片上传功能运行得好好的,一部署到GoDaddy主机就失效了,而且已经尝试了删除move_uploaded_file、核对表结构这些方法还是没解决。下面我帮你梳理几个高概率的排查方向和解决方案:
1. 先排查目录拼写与权限问题
这是GoDaddy主机上最常见的上传失败原因:
- 检查文件夹名称:你的代码里写的是
domuents/img/,这是不是拼写错误?大概率应该是documents/img/吧?如果实际服务器上的文件夹名是documents,那这个笔误会直接导致找不到目标目录,上传自然失败。 - 修改目录权限:通过GoDaddy的文件管理器找到上传目标文件夹,右键设置权限为
755(文件夹权限,文件设为644)。如果测试时还是不行,可以临时设为777(仅限测试,之后一定要改回755保证安全),确认是否是权限问题。
2. 检查PHP上传配置限制
GoDaddy的默认PHP配置可能会限制文件上传的大小或类型:
- 先在你的项目里创建一个
phpinfo.php文件,内容如下:
访问这个文件,重点查看以下参数:<?php phpinfo(); ?>upload_max_filesize:确保这个值大于你要上传的文件大小(比如设为10M)post_max_size:这个值必须比upload_max_filesize大(比如12M)file_uploads:必须是On状态
- 如果参数不符合要求,你可以通过两种方式修改:
- 登录GoDaddy主机控制面板,找到PHP设置界面直接调整
- 在项目根目录创建
.user.ini文件,写入以下内容:upload_max_filesize = 10M post_max_size = 12M file_uploads = On
3. 修正代码中的细节问题
你的代码里有几个可以优化的点,可能是导致失败的原因:
- 先判断并创建目标目录:在执行
move_uploaded_file之前,先确认目录是否存在,不存在就递归创建:$targetDir = "documents/img/"; // 先修正拼写错误 if (!file_exists($targetDir)) { mkdir($targetDir, 0755, true); // 递归创建多级目录 } $uploadSuccess = move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $targetDir . $_FILES["fileToUpload"]["name"]); - 去掉不必要的转义:你用了
addslashes处理图片二进制内容,但PDO的参数绑定已经会自动处理转义,手动添加反而可能导致问题,改成:$imagetmp = file_get_contents($_FILES['fileToUpload']['tmp_name']); - 检查数据库字段类型:
mytmp字段要设置为LONGBLOB类型,如果是BLOB的话,存储大图片会溢出导致插入失败;imagename字段建议设为VARCHAR(255),确保能容纳完整的文件名。
4. 打开错误调试,定位具体问题
关闭error_reporting(0),打开错误提示,这样能直接看到具体的错误信息:
error_reporting(E_ALL); ini_set('display_errors', 1);
同时,在move_uploaded_file之后添加错误检查:
if (!$uploadSuccess) { echo "文件上传失败,错误码:" . $_FILES["fileToUpload"]["error"]; // 错误码对应含义:0=无错误,1=超过upload_max_filesize,2=超过表单限制,6=找不到临时目录,7=写入失败 }
按照上面的步骤逐一排查,大概率能找到问题所在。比如我遇到过很多GoDaddy用户都是因为目录拼写错误或者权限不够导致的上传失败。
内容的提问来源于stack exchange,提问作者Tareq Al-Sharqawi
相关产品推荐
相关产品推荐

