move_uploaded_file() 无法打开流:没有这样的文件或目录

2022-08-30 23:07:41

我已经完成了你的标准检查(那里的目录,设置的权限足够宽松),我很确定我已经涵盖了你的标准愚蠢的人类技巧。下面是失败的代码:

move_uploaded_file($_FILES['image1']['tmp_name'], "/public_html/flashsale/assets/img/products/T".$_FILES['image1']['name']);

目录就在那里 - 我从FileZilla复制了路径。我甚至将权限设置为777,无论是在FileZilla中还是在HostGator控制面板上的文件管理器中。此代码生成两个警告:

消息: move_uploaded_file(/public_html/flashsale/assets/img/products/Tsirloin.jpg) [function.move-uploaded-file]: 无法打开流: 没有这样的文件或目录

消息: move_uploaded_file() [function.move-uploaded-file]: 无法将 '/tmp/phpI5GZ3S' 移动到 '/public_html/flashsale/assets/img/products/Tsirloin.jpg'

按照这个顺序。那么,文件正在上传,目录存在并设置为777,我还能错过什么?


答案 1

您不需要将整个目录放到文件中。尝试从您的链接中删除,看看这是否有效。此外,文件不需要有777权限,我自己将文件上传到具有755权限的文件夹。/public_html/flashsale/

另外,您可以在目标目录中使用。该函数将为您提供需要用于移动文件的目录。getcwd();


答案 2

问题

$dirpath = dirname(getcwd())

这是我最初用来获取 /public_html/upload 文件夹的目录路径。$dirpath将包含

/public_html/upload

解决方案(在服务器上)

$dirpath = realpath(dirname(getcwd()))

由于我在共享宿主环境中,因此让move_uploaded_file工作的正确方法是将其用作目标:realpath(dirname(getcwd()))返回如下内容:

/home/cpanelusername/public_html/upload

推荐