2014-01-27 2 views
2

Я разработал код php, который читает файл csv (с помощью fgetcsv()), проверяет (настраиваемый) заголовок внутри файла, обрабатывает следующую полезную нагрузку данных и сохраняет результаты в базе данных. Код работает отлично, но стал очень большим, поскольку я не разбивал код на функции (все упомянутые действия находятся в типичном цикле while, как в известном первом примере www.php.net/fgetcsv).Как работает fgetcsv() под капотом?

Так что я хочу реорганизовать свой код, разбив функции на самом деле, определяя класс с помощью методов, и мне было интересно, нужен ли мне по-прежнему цикл while для доступа ко всему файлу или я могу используйте fgetcsv() с различными методами, например, в примере ниже: Eg вызовите fgetcsv() в разных методах друг за другом. Я не уверен, изменит ли значение fgetcsv() значение filehandler (указатель), когда он прочитал строку, поскольку я не мог найти это в руководстве www.php.net/fgetcsv или на этом сайте.

упрощенный пример кода:

class Mycsvfile { 

    $filehandle; 

    function __construct($filename){} //opens the $file with a name; sets $filehandle 

    function isValidHeader(){} //checks customised header; calls fgetcsv() 

    function processPayload(){} //processes the data payload after the header; calls fgetcsv() and database storage functions 

    function close(){} //closes the csv file 

} 

$myfile = new Mycsvfile('aname'); 

if($myfile->isValidHeader){ 
    $myfile->processPayload(); 
} 
$myfile->close(); 
+0

Я предлагаю создать итератор для анализа файла, проверьте этот комментарий в документах для примера http://fr2.php.net/fgetcsv#57802 и да, он меняет указатель –

+0

Он ничего не делает, кроме чтения из дескриптора: https : //github.com/php/php-src/blob/af6c11c5f060870d052a2b765dc634d9e47d0f18/ext/standard/file.c#L2037 – Blender

+0

Этот вопрос не соответствует теме, поскольку он принадлежит [codereview.stackexchange.com] (http://codereview.stackexchange.com) –

ответ

0

Если все остальное терпит неудачу, вы всегда можете посмотреть в исходный PHP код. Я не эксперт по этому вопросу, но это выглядит как выработки функции fgetcsv() описаны в файле /ext/spl/internal/splfileobject.inc вокруг линии 77. Вот ссылка на хранилище GitHub:

https://github.com/php/php-src/blob/master/ext/spl/internal/splfileobject.inc#L77

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