PHP для загрузки нескольких файлов:
<?php
date_default_timezone_set("America/Edmonton");
$products=array();
$dir="../products/"; //Set this for whatever your folder
function getProduct($file) {
$fp=fopen($file,"r");
//Read five lines
for ($j=0;$j<5;$j++) $line=fgets($fp);
$GLOBALS["products"][]=substr($line,14);//Since products is a global var
fclose($fp);
}
$dp=opendir($dir);
while (($file = readdir($dp)) !== false) {
if ($file!="." && $file!="..")
getProduct($dir.$file);
}
closedir($dp);
//Review the product list
print_r($products);
?>
Файл примера (one.txt):
line 1
line 2
line 3
line 4
Product Desc: iPhone
line 6
Ярлыки:
Поскольку нам нужна только пятая строка, мы используем цикл $j
для чтения первых пяти строк, каждая из которых перезаписывает последнюю. Если файл меньше пяти строк, вы получите null
из $line
... вам следует проверить это (а не добавлять его в список продуктов). Наконец, поскольку мы теперь имеем длину строки "Product Desc:
" (как вы ее написали), мы можем просто выбросить эту первую часть строки. Это не ужасно надежно, лучше использовать RegEx или разбор строк, чтобы убедиться, что есть правильные слова, а затем использовать данные после двоеточия. Тем не менее ... он отвечает на ваш оригинальный вопрос;)
Вы сказали, что может быть намного больше строк, этот подход загружает в память только первые 5 строк (каждая поверх записи последней) и останавливается после достижения пятой строки ... что означает серьезные преимущества в производительности и памяти по сравнению с чтением весь файл в массив (file
) и затем только с использованием строки 5.
Проектные решения:
Похоже, вы создаете каталог продуктов, было бы гораздо лучше использовать базу данных для хранения этих данных. Это не должно быть большим делом (MySQL, PostgreSQL), это может быть что-то столь же простое, как SQLite.