2015-02-08 3 views
0

Я разрабатываю приложение, использующее php для личного использования. Чего я хочу достичь:Прочитать файл один за другим из каталога

У меня есть большое количество изображений в каталоге. Я хочу написать некоторое описание для каждого изображения. Я подготовил таблицу DB с тремя столбцами: id, image_name (уникальное ограничение) и описание. И чтобы это сработало, я разработал веб-страницу, где я открою каждое изображение в браузере, напишу описание об этом, сохраните его в базе данных и затем откройте следующее изображение, щелкнув рядом и так далее.

Однако я не мог понять, как этого достичь. Если я сделаю что-то вроде:

$dir = "/images/"; 

// Open a directory, and read its contents 
if (is_dir($dir)){ 
    if ($dh = opendir($dir)){ 
    while (($file = readdir($dh)) !== false){ 
     echo "filename:" . $file . "<br>"; 
    } 
    closedir($dh); 
    } 
} 

Тогда я в конечном итоге открою n-1 изображения, прежде чем достигнуть n-го изображения.

+0

означают imagenames имеют структуру? как 1.jpg 2.jpg, .... 500.jpg? – FeedTheWeb

+0

Не уверен, правильно ли я понял вопрос, но сначала использовал scandir поверх opendir, http://php.net/manual/en/function.scandir.php. Затем отсортируйте этот массив файлов и используйте ключ этого массива в ссылке для следующей кнопки. – chris85

ответ

0

Использование браузера вы не можете сделать это, потому что между веб-запросами PHP не сохраняет свое состояние.

Что вы можете сделать, это:

  1. Держите последний номер изображения в куки - на следующем запросе вы будете читать его и перейти к нужному номеру (вам все равно придется пропустить).
  2. Отправьте весь список файлов с PHP на ваш браузер и перейдите по нему на одной странице с помощью запросов Javascript и AJAX.
  3. Сохраните список и/или текущий номер в своей базе данных в некоторой временной таблице. Поэтому каждый раз, когда вы отправляете запрос на PHP-скрипт, он сначала проверяет, существуют ли сохраненные данные.
0

Что бы я сделал это, чтобы найти изображение, которое не существует в уже базе данных и запросить описание для этого, это сделало бы PHP быть похожим:

if (!empty($_POST['image'])) { 
    // Save the image/description in the db 
} 
$existing = array(); // Fill this array with the image names that exist in the db. 
$dir = "/images/"; 
// Open a directory, and read its contents 
$file = null; 
if (is_dir($dir)){ 
    if ($dh = opendir($dir)){ 
     while (($file = readdir($dh)) !== false){ 
      if (!in_array($file, $existing)) { 
       break; 
      } 
     } 
     closedir($dh); 
    } 
} 
if ($file === null) { 
    die('something is wrong, I can not get any files'); 
} 
// set the $file to your view 

И в html У меня было бы что-то вроде этого:

<form action=""> 
    Image: <input name="image" type="text" value="<?php echo $file; ?>"/> 
    Description: <input name="description" type="text" value="<?php echo $file; ?>"/> 
</form> 
1

Я бы сначала импортировал файлы в базу данных. Не фактические файлы, а просто ссылка на файл в папке. (это не полный код, но вы получите точку)

$files = array_diff(scandir("/path/to/directory"), array(".", "..")); 
foreach($files as $file) { 
    //insert a reference into the database 
    $query = "insert into table_name (image_name) values $file;"; 
    mysql_query($query); 
} 

После того, как они находятся в месте, вы можете легко запросить их с помощью Id.

Веб-страница будет выглядеть примерно так:

<?php 
$imageId= (int)$_GET['id']; 
$row = mysql_fetch_array("select * from table_name where id=$imageId"); 
?> 

<html><body> 
<a href="?id=<?php echo $imageId + 1; ?>"> Next image </a> 
<img src="<? echo $row['image_name']; ?> "> 
your form here... 

и перейти на страницу, используя, например http://127.0.0.1/images/index.php?id=1

+1

Никогда не вводите пользовательский ввод непосредственно в ваш SQL-запрос. http://en.wikipedia.org/wiki/SQL_injection При минимальном литье. '$ imageId = (int) $ _ GET ['id'];' – chris85

+0

@ chris85, было указано, что это для личного использования, а не для общедоступного веб-сайта. но, конечно, лучше добавить некоторые меры безопасности. – FeedTheWeb

+0

Хотя я опаздываю здесь, чтобы посмотреть ответ, но это было именно то, что я сделал. Я сохранил все записи сначала в БД, а затем выбрал один за другим из db. Я сохранил запись последнего просматриваемого файла в файл cookie, как это предложил @ Andrii –

Смежные вопросы