2016-04-12 3 views
-1

У меня есть система, которая позволяет пользователю загружать PDF-файлы и сохранять имя файла в базе данных.Удалить файлы с сервера, имя которого нет в базе данных

Как я могу заставить этот скрипт работать, чтобы пользователь мог удалить все файлы с сервера, чье имя нет в моей базе данных?

Это то, что у меня на самом деле есть, но скрипт удаляет все файлы. Я не знаю, как это сделать.

<?php 

include 'fimg.class.php'; 
require('../../../php/cone.php'); 
//header('Location: ../produccion.php'); 

$directory = "upload/"; 

//get all image files with a .jpg extension. 
$images = glob($directory . "*"); 

foreach($images as $image) 
{ 
    $name = explode('_',$image); 
    $name = 'photos/' . $name[0]; 
    $sql = mysql_query("SELECT imagen FROM r_alumnos"); 
    if(mysql_num_rows($sql) == 0) 
     unlink($image); 
} 

?> 
+2

Пожалуйста [прекратить использование '' mysql_ * функции] (http://stackoverflow.com/questions/12859942/why-shouldnt-i-use-mysql-functions-in-php). [Эти расширения] (http://php.net/manual/en/migration70.removed-exts-sapis.php) были удалены в PHP 7. Узнайте о [подготовленном] (http://en.wikipedia.org/ wiki/Prepared_statement) для [PDO] (http://php.net/manual/en/pdo.prepared-statements.php) и [MySQLi] (http://php.net/manual/en/mysqli.quickstart .prepared-statements.php) и подумайте над использованием PDO, [это действительно довольно легко] (http://jayblanchard.net/demystifying_php_pdo.html). –

+1

Используйте предложение WHERE. –

+0

Что такое имя файла изображения в БД? полный путь или просто имя файла? Также убедитесь, что вы получаете только файлы 'jpg', используя' glob ($ directory. "* .jpg"); ' –

ответ

0

Вы можете создать что-то вроде сервис-скрипта, который передает это.

Во-первых, погрузить все в массиве (я лично не нравится несколько запросов выполнить):

$database_files = array(); 
$result_db_files = mysqli_query("SELECT imagen FROM r_alumnos"); 

while ($row = $result_db_files->fetch_assoc()) 
{ 
    $database_files[] = $row['imagen']; 
} 

Затем проверьте каждый файл:

$images = glob($directory . "*"); 

    foreach($images as $image) 
    { 
     $name = explode('_',$image); 
     $name = 'photos/' . $name[0]; 
     if (!in_array($name, $database_files)) 
     { 
      unlink($image); 
     } 
    } 
Смежные вопросы