我在php中有断开链接的问题…目录下的文件以php格式上传。
ls -l of/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权限,但仍然不起作用。我可以在那个路径上通过浏览器访问图像。
谢谢你的帮助!
在任何UNIX系统上,/
是您的系统根。因此,当您尝试访问/files
时,您将尝试访问位于系统根目录下的文件夹files
。我认为你想访问/path_to_www/files
,所以要么使用存储基本路径的变量,要么使用相对路径。
另一方面,当您尝试从web浏览器访问/files
时,它会到达您的web目录(或别名路径)的/
。所以从浏览器访问图像是很正常的但不能从php访问。
错误告诉您问题所在-文件$file_path . $file_name
不存在。把它重复一遍——它和你认为它应该的一样吗?
你引用的存储位置是标准的('相对'到根目录/)-你是故意的吗?你的盒子上有一个叫/files
的目录吗?如果有的话,我会很惊讶的……
您应该将其设置为if (is_file($file_path . $file_name) && unlink($file_path . $file_name))
,以防文件由于外部原因而丢失,以摆脱丑陋的错误消息,并且可能还设置为$file_name = ltrim($file['Upload']['path'],'/');
以摆脱任何偏离的前导斜杠…
您的文件路径中有一个开始斜杠,它告诉应用程序查看root
,而不是从当前位置。您应该更改您的路径以包含.
,因此它是
./files/uploads/example.JPG.
尝试回显getcwd()
以确保您在您认为的目录中
ls -l of/files/uploads/你是用你的用户帐户/shell做的,对吗?
可能运行php的进程"看到"的文件系统与您的用户帐户不同(例如chroot环境或类似的东西)。
<?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));
}
}