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

 ?>

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

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
  • is_fileへのフルパスを指定する必要があります。image.jpgのような部分的なパスは、そのファイルがどこにあるかを教えてくれません。ドキュメントルートに相対的であると想定される場合は、その前に追加する必要があります。

  • これは私が今まで見た中で最も危険なスクリプトの1つです。任意のファイルをphoto_idに渡すことができ、Webサーバーに適切な権限がある限り、そのファイルは削除されます。少なくとも、特定のディレクトリ内のファイルのみを削除するように制限していることを確認する必要があります。

于 2010-08-04T19:56:15.120 に答える
0

たとえば、パスを指定する必要がある場合があります

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

(ファイルがスクリプトと同じフォルダにあると仮定して)他の人が言ったことと同じように、他のセキュリティが設定されていない限り、これは危険なスクリプトです!

于 2010-08-04T21:24:55.130 に答える
0

投稿でトリムを使用するか、変数を取得してみてください。例:

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

私の場合、問題は$photo_idファイル名を返さないことです。これは、「filename」であるはずの「filename」のようなものを返すので、追加trimして、今はうまくいきました。

于 2011-07-07T21:45:04.350 に答える