php取消链接问题 - 文件存在

时间:2011-08-15 16:19:19

标签: php cakephp

我在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权限但仍然无法正常工作。我可以通过该路径的浏览器访问该图像。

感谢您的帮助!

5 个答案:

答案 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的过程“看到”文件系统的方式与用户帐户不同(例如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));
    }
}