Статьи PHP, Форум, Уроки PHP, дизайн, раскрутка сайта
Портал для программистов, дизайнеров, SEO - оптимизаторов.
Статьи PHP, MySQL, AJAX, Раскрутка сайта, Заработок на своем сайте
Статьи PHP, MySQL, AJAX, Раскрутка сайта, Заработок на своем сайте
TIGER ICQ 3 6 0 2 9 5 6 8 3
     
Выберите раздел
php, javascript,ajax,mysql,TIGER CMS
  Для начинающих
php, javascript,ajax,mysql,TIGER CMS
  Общие
php, javascript,ajax,mysql,TIGER CMS
  Безопасность
php, javascript,ajax,mysql,TIGER CMS
  Интересное
php, javascript,ajax,mysql,TIGER CMS
  Новости PHP
php, javascript,ajax,mysql,TIGER CMS
  PHP + AJAX
php, javascript,ajax,mysql,TIGER CMS
  JavaScript
php, javascript,ajax,mysql,TIGER CMS
  Дизайн
php, javascript,ajax,mysql,TIGER CMS
  Раскрутка
php, javascript,ajax,mysql,TIGER CMS
  Заработок
php, javascript,ajax,mysql,TIGER CMS
  Советы

Поиск
 
 
 

Друзья сайта
 
 
1. www.bvisoft.com
Онлайн счетчик
 

Статистика
  Всего статей: 405
  Опубликовано: 405
  Проверяються: 0
  Добавлено сегодня: 0
--------------------------------------
  Прочитано статей: 405
  Всего прочтений: 155350
--------------------------------------
  Сейчас читают: 5 чел.

Кнопка сайта
  Если мой сайт вам чем-то помог, поставьте, пожалуйста, на своем сайте такую кнопку:
 
  Код кнопки:
 

 

Проблема с fgetcsv и ее решение [Версия для печати]
Разместил: admin . Раздел: Общие. Опубликовано: 09-20-2007 19:57:41
Сегодня, буквально пару часов назад, мне пришлось ковыряться в скрипте знакомого. Скрипт работает с базой данных в виде CSV-файла и соответственно использует функции для работы с CSV.
Через 10 минут тестирования кода скрипта я понял, что функция fgetcsv попросту не работает на сервере, вернее со страшной силой глючит и выдает совершенно спонтанный результат.
Решать проблему надо было быстро, а устранение неисправности на хостинге, да еще и на чужом - сами понимаете wassat

Ну, проблема была решена мной в течение пяти минут, а с тем, как я решил эту проблему, я собственно решил поделиться и с Вами wink

Итак, что мы имеем:
1. Мы имеем функцию fgetcsv() , которая не корректно работает на сервере.
2. Мы имеем скрипт который использует fgetcsv() и соответственно отказывается нормально работать.
3. Мы не имеем доступа к настройкам сервера, так что о быстром исправлении работы функции fgetcsv не может идти и речи.

Лично у меня вывод напросился сам собой - написать функцию, которая заменит fgetcsv() , что и было сделано в течение пяти минут, за чашечкой кофе laughing

Открываем документацию PHP:
fgetcsv
(PHP 3 >= 3.0.8, PHP 4, PHP 5)

fgetcsv -- Читает строку из файла и производит разбор данных CSV
Описание
array fgetcsv ( resource handle [, int length [, string delimiter [, string enclosure]]] )

handle
Корректный файловый указатель на файл, успешно открытый при помощи fopen(), popen(), или fsockopen().

length (Необязательный)
Должен быть больше самой длинной строки (в символах), найденной в CSV-файле (включая завершающий символ конца строки). Он стал необязательным в PHP 5. Если этот аргумент не указан (или равен 0 в версиях PHP 5.0.4 и выше), максимальная длинна строки не ограничена, но функция работает немного медленнее.

delimiter (Необязательный)
Устанавливает разделитель поля (только один символ). По умолчанию это запятая.

enclosure (Необязательный)
Устанавливает символ ограничителя поля (только один символ). По умолчанию это двойная кавычка. Добавлен в PHP 4.3.0.

Данная функция похожа на функцию fgets(), с той разницей, что она производит анализ строки на наличие записей в формате CSV и возвращает найденные поля в качестве массива.

Функция fgetcsv() возвращает FALSE в случае ошибки, а также по достижению конца файла.

Замечание: Пустая строка CSV-файла будет возвращена в качестве массива, содержащего единственный элемент null, ошибки в данном случае не возникнет.

Другими словами, эта функция считывает строку из файла и помещает данные в массив. Данные из строки, помещатся в соответствующие элементы массива, на основе указанного разделителя (чаще всего точка с запятой ";" или запятая).

Сразу же мне на ум приходит почти аналогичная функция split(), которая делает почти то же самое, только работает не с файлом, а с конкретной строкой.

В итоге, получился такой код:
function xfgetcsv($f='', $x='', $s=';'){
if($str=fgets($f)){
$data=split($s, trim($str));
return $data;
}else{
return FALSE;
}
}

Эта функция работает абсолютно идентично fgetcsv, за тем лишь исключением, что невозможно ограничить лимитом длину строки (ну мне это было не нужно в данном конкретном случае). Так что если возникли проблемы с fgetcsv - берите и пользуйтесь на здоровье smile
Функция на столько проста, что комментарии в ней попросту не нужны smile

Примечание: Данная статья написана больше для того, что бы показать, что безвыходных ситуаций в принципе не бывает, достаточно применить воображение.
Источник: http://qdp.ru   Прочитана 510 раз.
  Закладки:  
     
     
     




     
   TIGER EMAIL tiger1989@mail.ru
online SpyLOG тИЦ и PR
Copyright 2007 by TIGERCMS.com
Powered by TIGER-News v1.1