通过 php 上传的文件:没有这样的文件或目录
Posted
技术标签:
【中文标题】通过 php 上传的文件:没有这样的文件或目录【英文标题】:file uploaded via php: no such file or directory 【发布时间】:2009-11-05 08:04:17 【问题描述】:我正在开发一个用户可以上传图片的网站(使用 php 4.3.11)。文件上传没有问题,因为我可以在上传目录中看到它们并且我没有收到任何错误消息,但是当我尝试通过 ftp 访问上传的文件时,我收到一个错误:没有这样的文件或目录。有时,我可以访问该文件有时我会收到此错误。这可能是什么问题?
[更新] 谢谢你们的帮助。我不熟悉 ftp 守护进程的东西。但我确实使用 FireFTP 通过 ftp 访问我的文件。文件在那里,但是当尝试下载它们或更改文件属性时,我得到了上述错误。我还尝试通过ftp上传文件夹中的文件,我能够毫无问题地下载它。
这是我正在处理的一些代码,有点绕道,但我会看看如何改进它。
我的工作目录是这样的 www.domain.com/register/ 上传目录在这里www.domain.com/register/uploads/
用户需要注册并在注册时,在上传目录中为他们创建一个文件夹。我找不到创建文件夹而不必位于上传文件夹本身的方法,因此我重定向到 uploads 中的 create-user-folder.php 文件目录。
文件只包含以下代码:
$user_foldername = rawurldecode($_GET['name']); mkdir($user_foldername); header("位置:../form.php"); // 重定向回页面我检查了,创建的文件夹的权限设置为775。
这是我在上传时使用的部分代码(/register/function/function.php):
$path = "../uploads/$user_foldername/"; for($j = 0; $j我使用 FireFTP 进行了检查,文件位于 /uploads/user_foldername/ 目录中,其权限设置为 664。奇怪的是,当我尝试下载文件时,有时会出现完全没有问题,但有时会出现错误。
[另一个更新] 我在 copy() 函数之后添加了 chmod(),
$filename = $_FILES[$file]['name'][$j]; 复制($_FILES[$file]['tmp_name'][$j],$path.$filename); chmod($path.$filename, 0755);但我仍然得到错误。
另外一件事是当我通过url访问/register/uploads/user_foldername/时,我可以看到所有上传的文件并查看它们,但是我怎么无法访问他们通过ftp?
再次感谢!
【问题讨论】:
请提供可重复错误的操作系统。 有些代码会很棒,很难判断是权限问题还是基本路径问题 【参考方案1】:这要么是权限问题,要么是配置错误。以下是您应该尝试的事情:
上传文件的权限是什么? FTP 用户是否有权访问这些文件?您是否尝试过以 FTP 守护程序将使用的用户身份登录并查看您是否可以通过这种方式读取文件?
你真的看到了正确的目录吗?您是否通过自己将文件放入该目录并下载它来验证?您是否使用过ftp
命令ls
来验证文件夹/文件夹/文件是否存在?
【讨论】:
【参考方案2】:您可能需要chmod
文件所在的文件夹,或者在某些情况下需要文件本身。
尝试chmod
ing 他们到 775
您可以通过 PHP 它自己使用 chmod 函数对文件和文件夹进行 chmod。或者,您可以使用 FTP 程序,例如 filezilla。
【讨论】:
【参考方案3】:还要检查以确保中间目录也被许可为 755,因为路径中的所有目录都需要可执行才能被遍历。
【讨论】:
谢谢!我检查了中间目录,它们都设置为 775,但我仍然无法通过 ftp 访问文件。我一定错过了什么。【参考方案4】:我刚刚发现了问题。这完全是因为文件名中包含重音字符,这解释了为什么我并不总是收到错误消息:|
再次感谢!我真的很感激:)
【讨论】:
以上是关于通过 php 上传的文件:没有这样的文件或目录的主要内容,如果未能解决你的问题,请参考以下文章
无法打开流 - 没有这样的文件或目录 - Lumen PHP
警告:mysql_connect(): [2002] 没有这样的文件或目录(试图通过 unix:///tmp/mysql.sock 连接)