我一直在努力几天,试图找出为什么我无法将文件(move_uploaded_file
)从临时移动到我设置的目录(/img/uploads/photos
)。
经过大量的测试和挠头,我决定将上传函数中发生的任何内容写入 CakePHP 的 CakeLog。
虽然我已经物理创建了:/img/uploads/photos
,但当我使用CakeLog::write('debug', 'Does directory exist?: '.json_encode(file_exists('/img/uploads/photos/')));
时它会记录false
。或is_dir
,也返回false
为什么会这样...谁能帮我!
我怀疑你已经做了一个目录/img/uploads/photos/
?它可能与您的其他文件位于同一目录内,例如/var/www/yoursite/img/uploads/photos/
或类似的东西。
你可以使用一些技巧,如 $_SERVER{'DOCUMENT_ROOT'}
,如你所看到的 http://php.net/manual/en/function.file-exists.php
当你说你已经创建了/img/uploads/photos/
目录时,我不相信你。这是一条绝对路径,从机器的根部开始计算。更有可能的是,您已在 Web 目录中的某个位置(例如 /var/www/img/uploads/photos/
或 /home/caboone/public_html/img/uploads/photos/
)创建了文件夹。
路径/img/...
表示路径相对于磁盘根目录,即它表示硬盘最顶层的img
目录。我怀疑这就是目录所在的地方。不要以/
开头的路径,以使其相对于您正在处理的文件。文件路径不是网址!
- 将文件从一个目录移动到另一个目录时使用绝对路径。使用
dirname(__FILE__)
获取绝对当前工作目录,然后添加路径的其余部分。 - 按照@Alex的建议设置目录的适当权限。 使用
chmod()
和将权限设置为 777 (UGO+W) [用户+组 + 其他世界可写]。