borodatych
Постоялец
- Регистрация
- 24 Июн 2016
- Сообщения
- 159
- Реакции
- 105
На стеке завалялся Для просмотра ссылки Войди или Зарегистрируйся, может будет полезен.
Follow along with the video below to see how to install our site as a web app on your home screen.
Примечание: This feature may not be available in some browsers.
Только нужны доработки:На стеке завалялся Для просмотра ссылки Войдиили Зарегистрируйся, может будет полезен.
while (($fileop = fgetcsv($handle, 1000, ",")) !== false)
$sql = "INSERT INTO details(name, age, location) VALUES ('$name', '$age', '$location')";
$query = Yii::$app->db->createCommand($sql)->execute();
Не проще.Может проще включить вывод ошибок и посмотреть чего не хватает серверу на больших файлах и подкрутить этот параметр в php.ini?
Можно Вас попросить написать любой пример кода, который сможет импортировать excel файл размером 7mb в mysql...
На данном этапе использовать мемкеш рановато, так как мой комп зависает когда пытается вытащить из excel информацию, а не при обработке ее в базе...
При выполнении этой части кода происходит зависание:PHP:$objectPhpExcel = $objectreader->load($fileName);
P.S. касается только объемных файлов, файлы до 1mb импортируются без проблем...
Относительно советов грузить построчно, то просьба показать пример!
// Определяем колонки из первой строки файла
$amount = 50; //сколько строчек заливать за 1 заход
$f = fopen('$filepath', 'r');
// Переходим на заданную позицию, если импортируем не сначала
if ($from = $this->request->get('from')) {
fseek($f, $from);
}
$pi = pathinfo($filepath);
$filename= $pi['filename'];
$columns = fgetcsv($f, null, ';'); //ставишь чем там у тебя разделено, если эксель, то ; хоть и называется csv
//Теперь сделаем таблицу для наших столбцов
$str = array();
$str2 = array();
foreach($columns as $col){
$str[] = " `$col` varchar(1000) DEFAULT '' ";
$str2[] = "`$col`";
}
$str = implode(', ', $str);
$str2 = implode(', ', $str2);
if(!isset($from)){
$mysqli->query("CREATE TABLE `$filename` ($str)");
}
//таблица есть, теперь запилим в нее оставшиеся строчки файла
while($row = fgetcsv($f, null, ';') && $count < $amount){
foreach($row as &$r){
$r = "'$r'";
}
unset($r);
$vals = implode(', ', $row);
$mysqli->query("INSERT INTO `$filename` VALUES ($vals)");
$count++;
}
// Запоминаем на каком месте закончили импорт
$from = ftell($f);
print "from: $from";
//это тестовый пример, тут на каждом цикле место остановки будет просто выводится на экран