php unlink проблемы - файл существует - PullRequest
1 голос
/ 15 августа 2011

У меня проблемы с unlink в 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 error:

Warning (2): unlink(/files/uploads/example.JPG) [function.unlink]: No such file or directory [APP/controllers/uploads_controller.php, line 55]

Я искал в стеке overflow, пытался дать 777 разрешений и все еще не работал.Я могу получить доступ к изображению через браузер по этому пути.

Спасибо за помощь!

Ответы [ 5 ]

4 голосов
/ 15 августа 2011

В любой системе UNIX / является корневым каталогом вашей системы. Поэтому, когда вы пытаетесь получить доступ к /files, вы пытаетесь получить доступ к папке files, расположенной в корневом каталоге вашей системы. Я думаю, что вы хотите получить доступ к /path_to_www/files, поэтому либо используйте переменную, которая хранит ваш базовый путь, либо используйте относительный путь.

С другой стороны, когда вы пытаетесь получить доступ к /files из вашего веб-браузера, он достигает / вашего веб-каталога (или пути псевдонима). Поэтому вполне нормально, что вы можете получить доступ к своему изображению из браузера, но не из php.

1 голос
/ 15 августа 2011

Ошибка говорит вам, в чем проблема - файл $file_path . $file_name не существует. Отголосуй - это равняется тому, что, как ты думаешь, должно быть?

Вы ссылаетесь на место хранения канонически («относительно» корневого каталога /) - вы имели в виду? Есть ли на вашем компьютере каталог с именем /files? Если бы это было, я был бы удивлен ...

Вы должны сделать это if (is_file($file_path . $file_name) && unlink($file_path . $file_name)) в случае, если файл пропал из-за внешней причины, чтобы избавиться от некрасивого сообщения об ошибке, и, вероятно, также сделать $file_name = ltrim($file['Upload']['path'],'/');, чтобы избавиться от любых случайных начальных слешей ...

1 голос
/ 15 августа 2011

В вашем пути к файлу есть косая черта, которая указывает приложению смотреть на root, а не с вашего текущего местоположения. Вы должны изменить свой путь, чтобы включить ., так что это

./files/uploads/example.JPG.

0 голосов
/ 15 августа 2011

ls -l of / files / uploads /
Вы сделали это с помощью своей учетной записи пользователя / оболочки, не так ли?
Может быть процесс, запускающий php, "видит"файловая система отличается от вашей учетной записи пользователя (например, среда chroot или что-то в этом роде).
<code><?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
\ n "; // debug -> if (unlink ($ file_path. $ file_name)) {if ($ this-> Upload-> delete ($ id)) {$ this-> setFlash («Файл удален»); $ this-> redirect (массив (представление «controller» => «классы», «action» => »)', $ classroom_id));}}
0 голосов
/ 15 августа 2011

Попробуйте повторить getcwd(), чтобы убедиться, что вы находитесь в каталоге, который, по вашему мнению, вы есть.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...