поможите, плиз, с php & mysql

12 3
Y
На сайте с 11.05.2006
Offline
99
1645

есть директория на сервере с кучей файлов (несколько тыс).

нужен скрипт, который при запуске внесет в БД данные всех файлов:

имя файла и его размер.

структура таблицы в БД простейшая:

id, filename, razmer

прошу помочь...

timur-kar
На сайте с 29.05.2006
Offline
85
#1

если нет вложненных директорий - то скрипт такой примерно


$path = "./"; // здесь путь к директории
$d = dir($path);
while (false !== ($filename = $d->read())) {
mysql_query("INSERT INTO table SET filename='" . str_replace("'", "\\'", $filename) . "', razmer=" . filesize($path . $filename));
}
$d->close();

вместо table поставить имя своей таблицы, вместо ./ - путь к директории

AM
На сайте с 12.09.2007
Offline
47
#2

индусский код. несколько тыщ инсертов в цикле, надо же так придумать... вообще то нужно формировать данные и порциями, например штук по 500 вставлять в бд.

С уважением, Морозов Андрей, разработчик проекта eTXT.ru (http://www.etxt.ru/?r=morozov), icq 55377667
timur-kar
На сайте с 29.05.2006
Offline
85
#3
AndreM:
индусский код. несколько тыщ инсертов в цикле, надо же так придумать... вообще то нужно формировать данные и порциями, например штук по 500 вставлять в бд.

Да можно конечно, вопрос "зачем". Человеку явно нужен скрипт который 1 раз отработает, отработает он ненамного медленнее чем скрипт порциями, тут важнее чтобы скрипт как можно понятнее был

AM
На сайте с 12.09.2007
Offline
47
#4

ответ "затем": затем, чтобы человек и дальше по-индусски не мыслил, учить хорошему надо )) хотя каждому свое, я просто прокомментировал...

AndreM добавил 02.10.2008 в 16:27

сегодня ему показали инсерты в цикле, а завтра он додумается рекурсивное дерево в цикле с запросами строить.

I4
На сайте с 02.10.2008
Offline
10
#5
AndreM:
ответ "затем": затем, чтобы человек и дальше по-индусски не мыслил, учить хорошему надо )) хотя каждому свое, я просто прокомментировал...

AndreM добавил 02.10.2008 в 16:27
сегодня ему показали инсерты в цикле, а завтра он додумается рекурсивное дерево в цикле с запросами строить.

Ну тогда бы показали человеку хороший пример.

Попробую сам :)


$path = "./"; // здесь путь к директории
$d = dir($path);
$sqls = array();
while (false !== ($filename = $d->read())) {
$sqls[] = "(".mysql_real_escape_string(str_replace("'", "\\'", $filename)).", ".filesize($path . $filename).")";
}
if(!empty($sqls))
mysql_query("insert into `files_table` (`name`, `size`) values ".implode(",", $sqls));

$d->close();

Написал на скорую руку, что то может не работать.

Бесплатный анализ сайта! (http://saitomer.ru/)
S
На сайте с 13.07.2007
Offline
56
#6

i-404, гммм, а зачем еще и массив то создавать? %)

timur-kar
На сайте с 29.05.2006
Offline
85
#7

вот блин напридумывали :)

у человека конкретная задача, ему нужно конкретное решение.

вот взял AndreM и спровоцировал ненужную дискуссию, возьмет ТС код от i-404 и напорется на то что на тысячах файлов этот запрос превысит максимально возможную длину запроса для mysql_query, начнет копать, разбирать что не так происходит, начнет ругать mysql, php, индусов и билла гейтса заодно, а ведь ему просто нужно было занести список файлов в БД.

P.S.: на самом деле правильнее конечно порциями, но код получится еще длиннее, вероятность ошибки в коде еще больше будет, в случае изменений еще больше вникать придется, нечего демагогию разводить из-за пустякового скрипта которых похоже никому и не нужен особо :)

[Удален]
#8

ИМХО, лучше (и быстрее) не кусками отдавать, а записывать все данные в файл. А потом уже выполнить запрос LOAD DATA INFILE и вставить все в БД.

ответ "затем": затем, чтобы человек и дальше по-индусски не мыслил, учить хорошему надо )) хотя каждому свое, я просто прокомментировал...

AndreM, +1

timur-kar
На сайте с 29.05.2006
Offline
85
#9
Alexius:
ИМХО, лучше (и быстрее) не кусками отдавать, а записывать все данные в файл. А потом уже выполнить запрос LOAD DATA INFILE и вставить все в БД.

ага. и с высокой долей вероятности получить 1148 ошибку (если не свой хост - практически уверен что у него команда эта запрещена). як дети в самом деле

gerkon
На сайте с 21.10.2005
Offline
40
#10

Да ничего страшного, зачем порции то? У меня скрипты отрабатывали и по 30000 инсертов за раз и ничего не было.

По теме - не изобретайте велосипед.

Скрипт данный положить в ту самую папку:


<?php
foreach (glob("*.*") as $filename) {
mysql_query("insert into table(filename,razmer) values('".$filename."','".filesize($filename)."')");
}
?>
C уважением, Андрей. Пользуюсь этим хостингом уже 4 года! (http://www.replay.ru/index.php?part_id=3600) Ведущий манул Pixshock.net (http://www.pixshock.net)
12 3

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий