1

アップロードした画像の削除に問題があります。

データベースに挿入してアップロードします、削除はしません。

例:modelImagesModelの2つのテーブルがあります。Modelでは、1つのメイン画像のパスを保存しますが、modelImageでは多くの画像が存在する可能性があります。テーブルはmodelIDを介してリンクされています。

これは、パスがどのように見えるかの例です:img / 1/1/someImageName.png

(最初の1-makerID、2番目の1-modelID)。

include('connect.php'); //connect to database
$modelID=$_GET['modelID'];
$makerID=$_GET['makerID'];
$path="img/".$makerID."/".$modelID."/";

if ($stmt = $mysqli->prepare("SELECT images FROM modelImages WHERE modelID='$modelID'")) {

    $stmt->execute();    
    $stmt->bind_result($images);

    while ($stmt->fetch()) {
        if($images!=$path){
            unlink($images);
        }
    }

    $stmt->close();

}
else {
    printf("Prepared Statement Error: %s\n", $mysqli->error);
}

if ($stmt = $mysqli->prepare("SELECT mainImage FROM model WHERE makerID='$makerID' AND modelID='$modelID'")) {    

    $stmt->execute();
    $stmt->bind_result($mainImage);

    while ($stmt->fetch()) {
        if($mainImage!=$path){
            unlink($mainImage);
        }
    }

    $stmt->close();

}
else {
    printf("Prepared Statement Error: %s\n", $mysqli->error);
}

最初のコードを使用すると、 modelImagesテーブルからすべての画像が削除され、2番目のコードを使用すると、モデルテーブルから1つの画像が削除されます。

しかし、それらを一緒に使用すると、unlink()エラーが発生します。

Warning: unlink(img/1/1/image1.png) [function.unlink]: No such file or directory in /home/...
Warning: unlink(img/1/1/image2.png) [function.unlink]: No such file or directory in /home/...
Warning: unlink(img/1/1/image3.png) [function.unlink]: No such file or directory in /home/...
Warning: unlink(img/1/1/image4.png) [function.unlink]: No such file or directory in /home/...

結論:両方のクエリを一緒に使用すると、リンク解除は機能しません。

4

1 に答える 1

1

getcwd()a) 現在の作業ディレクトリが何であるか (「 」を参照) が確実にわかっている場合、または b) パスが別の作業ディレクトリに相対的に配置されていることが意図されている場合 (workdirectory-aware CLI ツールの場合など) を除き、相対パスは使用しないでください。)。絶対パスを常に使用するか作成する

"/path/to/img/".$makerID."/".$modelID."/";
__DIR__ . "/../path/to/img/".$makerID."/".$modelID."/";

移植性が高いので、私は2番目のものを好みます。

于 2013-02-19T23:57:55.727 に答える