0

问题


我想删除一个文件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);
    }

 ?>

阿贾克斯


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

4 回答 4

1

您的 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);
于 2010-08-04T20:00:30.300 回答
0

例如,您可能需要指定路径

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

(假设您的文件与您的脚本在同一个文件夹中)同上其他人所说的,这是一个危险的脚本,除非有其他安全措施!

于 2010-08-04T21:24:55.130 回答
0
  • 您需要提供 is_file 的完整路径。像 image.jpg 这样的部分路径不会告诉它该文件的位置。如果它应该与文档根目录相关,则需要在前面加上它。

  • 这是我见过的最危险的脚本之一。您可以将任何文件传递给 photo_id,只要网络服务器具有正确的权限,它就会将其删除。您至少应该确保将其限制为仅删除某个目录中的文件。

于 2010-08-04T19:56:15.120 回答
0

尝试在您的帖子中使用修剪或获取变量,例如:

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

在我的情况下,问题是$photo_id没有返回文件名 - 它返回类似“\nfilename”的东西,而它应该是“文件名”,所以我添加trim了它现在对我有用。

于 2011-07-07T21:45:04.350 回答