Удалить файлы с помощью AJAX / PHP - PullRequest
0 голосов
/ 04 августа 2010

Проблема


Я хочу удалить файл с AJAX/PHP.

Но php говорит, что имя файла, которое я посылаю с помощью AJAX, не является файлом, но когда я перехожу прямо по ссылке, я могу удалить файлы. Проверьте мой текущий PHP, я поместил в оператор IF / ELSE, чтобы проверить, является ли строка файлом с: is_file, результатом будет false.

Без is_file говорит это:

Warning: unlink("image.jpg") [function.unlink]: Invalid argument in C:\wamp\www\images\users\delete.php on line 8

Файл, который называет ajax, находится внутри папки, где также находятся файлы, которые я хочу удалить.

PHP


<?php
    // I save the file sources from the URL what was sent by AJAX to these variables.
    $photo_id = $_GET['photo_id'];
    $thumbnail_id = $_GET['thumbnail_id'];

    function deletePhotos($id){
        // If is a file then delete the file.
        if(is_file($id)){
            return unlink($id);
        // Else show error.
        } else {
            echo $id . " is not a file, or there is a problem with it.<br />" ; 
        }
    }

    if(isset($photo_id)){
        deletePhotos($photo_id);
    }
    if(isset($thumbnail_id)){
        deletePhotos($thumbnail_id);
    }

 ?>

AJAX


function deletePhoto(photo, thumbnail){

        var photos = encodeURIComponent(photo);
        var thumbnails = encodeURIComponent(thumbnail);

        if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari
          xmlhttp=new XMLHttpRequest();
        } else {// code for IE6, IE5
          xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
        }

        xmlhttp.onreadystatechange=function() {
            if (xmlhttp.readyState==4 && xmlhttp.status==200) {
                document.getElementById("media").innerHTML=xmlhttp.responseText;
            }
        }
        xmlhttp.open("GET", "http://192.168.2.104/images/users/delete.php?photo_id=\""+photos+"\"&thumbnail_id=\""+thumbnails+"\"", true);
        xmlhttp.send();
    }

Ответы [ 4 ]

1 голос
/ 05 августа 2010

Ваш запрос ajax содержит данные в кавычках.

//Bad
delete.php?photo_id="1234"

//Good
delete.php?photo_id=1234

//So use this:
xmlhttp.open("GET", "http://192.168.2.104/images/users/delete.php?photo_id="+photos+"&thumbnail_id="+thumbnails, true);
0 голосов
/ 08 июля 2011

попробуйте использовать обрезку в вашем посте или получить переменную, например:

$photo_id=trim($_GET['blah..blah']);

, в моем случае проблема в том, что $photo_id не возвращает имя файла - он возвращает что-то вроде этого \ nfilename, когдаэто должно быть имя файла, поэтому я добавил trim, и теперь оно работает для меня.

0 голосов
/ 05 августа 2010

вам может потребоваться указать путь, например

file_exists( realpath('.') . '/' . $id );

(при условии, что ваши файлы находятся в той же папке, что и ваш скрипт), то же самое, что сказали другие, это опасный скрипт, если нет другой защитына месте!

0 голосов
/ 04 августа 2010
  • Вам необходимо указать полный путь к is_file. Частичный путь, такой как image.jpg, не указывает, где находится этот файл. Если он должен быть относительно корня документа, вам нужно будет добавить это.

  • Это один из самых опасных сценариев, которые я когда-либо видел. Вы можете передать любой файл в photo_id, и, если веб-сервер имеет необходимые разрешения, он удалит его. Вы должны по крайней мере убедиться, что вы ограничиваете его только удалением файлов в определенном каталоге.

...