Cakephp解链接问题-文件存在


cakephp unlink problems - file exists

我在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));
    }
}