2017-09-09 7 views
-1

私が間違っていることがわかりません。条件が成立した後、特定のフォルダ内の画像を削除しようとしています。条件は、8枚以上の画像または写真を制限することです。 1枚の画像を削除すると動作しますが、その間に追加したり、の状態になると、アクセス拒否エラーが発生します。以下はphp unlinkパーミッションがwhileまたはwhenで拒否されました

条件のデシベルをチェックして、おそらくフォルダから画像を削除し、私のコードです:

mysql_select_db($database_rentaguide, $rentaguide); 
$query_overflow_images = sprintf("SELECT * FROM tbl_rentalimages WHERE sessionid = %s AND image_id > '$lastimageid'", 
    GetSQLValueString($colname_overflow_images, "text")); 
$overflow_images = mysql_query($query_overflow_images, $rentaguide) or die(mysql_error()); 
$row_overflow_images = mysql_fetch_assoc($overflow_images); 
$totalRows_overflow_images = mysql_num_rows($overflow_images); 

while ($row_overflow_images = mysql_fetch_assoc($overflow_images)); { 
    $overflowpath = $row_overflow_images['image_url']; 
    chmod("../".$overflowpath, 0777); 
    unlink("../".$overflowpath); 
} 

画像の実際のパスがある - >rentalimages/LqXtyVtzKm/architecture-1836070__340.jpg

の$ lastimageid変数は、8つ以上のイメージがある場合、8番目または最後のレコードのIDを取得するdb接続から取得されます。

私を助けてください。してください

ああ、私はあなたがwhileブロックの本体右の前に、あなたのコードにタイプミスを持っているWindows 7の64ビット

+1

なぜ 'chmod()'を呼び出すのですか?あなたがファイルへの書き込み許可を持っているか、そうでない場合、chmodコマンドは何らかの形でそのような許可を得るのを助けることができません。そして、確実にイメージファイルを実行可能に設定しても意味をなさない。 – arkascha

+0

whileループ内の '$ overflowpath'ファイルのリストをいくつかのログファイルにダンプし、その結果を確認してください。おそらくデータベース内に予期しない値がありますか? – arkascha

+1

一般的な注意:古くから廃止された 'mysql _...()'関数を使用しています。その拡張機能はセキュリティ上の理由から完全に削除されています。すぐにコードをより安全な 'mysqli'拡張モジュールに移植する必要があります。 – arkascha

答えて

0

上でXAMPPを実行しています(編集 - タイプミスは、セミコロンで言及するのを忘れてしまいました):

/* Empty loop, followed by a code block */ 
while ($row_overflow_images = mysql_fetch_assoc($overflow_images)); 
{ 
    /* $row_overflow_images is no longer an array */ 
    $overflowpath = $row_overflow_images['image_url']; 
    chmod("../".$overflowpath, 0777); 
    /* This line tries to delete the parent folder */ 
    unlink("../".$overflowpath); 
} 
0

これで終わりで働いていたものです....

mysql_select_db($database_rentaguide, $rentaguide); 
$query_overflow_images = sprintf("SELECT * FROM tbl_rentalimages WHERE 
sessionid = %s AND image_id > '$lastimageid'", 
GetSQLValueString($colname_overflow_images, "text")); 
$overflow_images = mysql_query($query_overflow_images, $rentaguide) or 
die(mysql_error()); 
$row_overflow_images = mysql_fetch_assoc($overflow_images); 
$totalRows_overflow_images = mysql_num_rows($overflow_images); 
do { 
    $filepath = $row_overflow_images['image_url']; 
    $imageid = $row_overflow_images['image_id']; 

    $deleteSQL = sprintf("DELETE FROM tbl_rentalimages WHERE image_id = %s", 
         GetSQLValueString($imageid, "int")); 

    mysql_select_db($database_rentaguide, $rentaguide); 
    $Result1 = mysql_query($deleteSQL, $rentaguide) or die(mysql_error()); 
    unlink("../".$filepath); 

} 
while ($row_overflow_images = mysql_fetch_assoc($overflow_images)); 

} 

PS私はmysqli拡張に移植すべきだと知っていますが、私は練習して、もっと学びたいと思っています。ありがとうstachoverflow。あなたは素晴らしいです!

関連する問題