我在php中取消链接时遇到问题...目录中的文件以php格式上传。
ls -l / files / uploads /
total 6976
-rw-r--r-- 1 alex admin 689030 15 Aug 11:40 01805_goneclubbing_1680x1050.jpg
-rwxrwxrwx 1 alex admin 174932 15 Aug 11:52 4vvF60D.tmp.jpg
-rw-r--r-- 1 alex admin 2699554 15 Aug 12:16 example.JPG
php脚本(cakePHP框架):
$file_path = '/files/uploads/';
$file_name = $file['Upload']['path'];
$classroom_id = $file['Upload']['classroom_id'];
if (unlink($file_path . $file_name)) {
if ($this->Upload->delete($id)) {
$this->setFlash('File deleted');
$this->redirect(array('controller' => 'classrooms', 'action' => 'view', $classroom_id));
}
}
php错误:
Warning (2): unlink(/files/uploads/example.JPG) [function.unlink]: No such file or directory [APP/controllers/uploads_controller.php, line 55]
我在stackoverflow上搜索,尝试授予777权限但仍然无法正常工作。我可以通过该路径的浏览器访问该图像。
感谢您的帮助!
答案 0 :(得分:4)
在任何UNIX系统上,/
是您的系统根目录。因此,当您尝试访问/files
时,您会尝试访问位于系统根目录的文件夹files
。我想你想访问/path_to_www/files
,所以要么使用存储基本路径的变量,要么使用相对路径。
另一方面,当您尝试从Web浏览器访问/files
时,它会到达您的Web目录的/
(或别名路径)。因此,您可以从浏览器访问图像而不是从php访问图像是完全正常的。
答案 1 :(得分:1)
您的文件路径中有一个左斜杠,告诉应用程序查看root
,而不是当前位置。您应该更改路径以包含.
,以便
./files/uploads/example.JPG.
答案 2 :(得分:1)
错误告诉您问题是什么 - 文件$file_path . $file_name
不存在。回应它 - 它是否与你认为的相同?
您正在大量引用存储位置(相对于根目录/) - 您的意思是?你的盒子上有一个名为/files
的目录吗?如果有,我会感到惊讶......
你应该把它if (is_file($file_path . $file_name) && unlink($file_path . $file_name))
以防万一由于外部原因丢失文件而导致丢失丑陋的错误消息,并且可能还$file_name = ltrim($file['Upload']['path'],'/');
去掉任何流浪的斜杠...
答案 3 :(得分:0)
尝试回显getcwd()
以确保您位于您认为的目录中。
答案 4 :(得分:0)
ls -l / files / uploads /你用你的用户帐户/ shell做了这个,不是吗?
<?php
$file_path = '/files/uploads/';
$file_name = $file['Upload']['path'];
$classroom_id = $file['Upload']['classroom_id'];
// <-- debug
echo '<pre>files in ', $file_path, ":\n";
foreach( glob($file_path.'*') as $f) {
echo "'", $f, "'\n";
}
echo "----\n</pre>\n";
// debug -->
if (unlink($file_path . $file_name)) {
if ($this->Upload->delete($id)) {
$this->setFlash('File deleted');
$this->redirect(array('controller' => 'classrooms', 'action' => 'view', $classroom_id));
}
}