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

Fib*_*con 11 php file-upload

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

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

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

消息: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,我还能缺少什么?

syr*_*ull 17

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

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

  • 事实证明我没有使用路径的/ home/user /部分 - 添加getcwd()修复它. (2认同)

UWU*_*DUN 8

问题

$dirpath = dirname(getcwd())
Run Code Online (Sandbox Code Playgroud)

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

/public_html/upload
Run Code Online (Sandbox Code Playgroud)

解决方案(在服务器上)

$dirpath = realpath(dirname(getcwd()))
Run Code Online (Sandbox Code Playgroud)

由于我在共享托管环境中,使move_uploaded_file工作的正确方法是使用它作为目标:realpath(dirname(getcwd()))返回类似于:

/home/cpanelusername/public_html/upload
Run Code Online (Sandbox Code Playgroud)