fgetcsv возвращает NULL в PHP 4

Одна из наших систем работает на PHP 4, и я не могу это изменить.

Функция fgetcsv, кажется, возвращает null независимо от того, какой файл я загружаю.

Очень просто:

$handle = fopen($file,"r");
var_dump(fgetcsv($handle));
fclose($handle);

Это распечатает «NULL».

Выполнение var_dump для объекта $handle дает мне ресурс:

resource(33) of type (stream)

Но я просто получаю NULL при использовании fgetcsv

Я могу получить содержимое файла, используя file_get_contents, но тогда более неудобно анализировать его как csv.

Как я уже сказал, я ничего не могу поделать с этим на PHP 4. Кто-нибудь знает, что может быть причиной этого, или я должен найти другой способ?

Спасибо


person CMR    schedule 14.08.2018    source источник
comment
fgetcsv() возвращает NULL, если указан недопустимый дескриптор   -  person Alex Howansky    schedule 14.08.2018
comment
Да, но ручка действующая.   -  person CMR    schedule 14.08.2018
comment
Да, не знаю, это все, что у меня есть, хех. Может быть, PHP4 не может var_dump() сделать что-то, что на самом деле не является переменной? Сначала присвоить возвращаемое значение переменной?   -  person Alex Howansky    schedule 14.08.2018
comment
Что такое $файл? Это какой-то URL?   -  person vp_arth    schedule 14.08.2018
comment
Это загруженный файл.   -  person CMR    schedule 14.08.2018
comment
Какая конкретная версия PHP 4?   -  person Sean Bright    schedule 14.08.2018
comment
4.4.9. В данный момент я пытаюсь сделать это с помощью file_get_contents, но кажется, что даже выполнение функции trim() для некоторых строк слишком сложно для сервера, время ожидания истекает через 60 секунд. Не совсем уверен, почему он так изо всех сил пытается обрезать некоторые пробелы   -  person CMR    schedule 14.08.2018
comment
спросил 32 минуты назад..... PHP 4 не поддерживается уже 10 лет.   -  person symcbean    schedule 14.08.2018
comment
@symcbean добро пожаловать в индустрию образования   -  person CMR    schedule 14.08.2018


Ответы (1)


Ваша первоначальная проблема может быть связана с использованием временно загруженного файла.
Попробуйте открыть его после move_uploaded_file

Также теоретически может помочь fseek($handle, 0), потому что это уже где-то читалось.


Я могу получить содержимое файла, используя file_get_contents

Вы можете попробовать использовать tmpfile, а затем:

$csv = file_get_contents($file);
$temp = tmpfile();
fwrite($temp, $csv);
fseek($temp, 0); // prepare for read at start
$data = fgetcsv($temp);
fclose($temp); // file autoremoved here
person vp_arth    schedule 14.08.2018
comment
str_getcsv() недоступен в PHP4. - person Alex Howansky; 14.08.2018
comment
упс) не знала - person vp_arth; 14.08.2018
comment
В чем проблема с использованием временных загруженных файлов? Руководство, спецификации, цитаты? - person deceze♦; 14.08.2018
comment
Ага, кажется, это сработало, хотя мне пришлось добавить параметр длины в fgetcsv(). Тьянкс - person CMR; 14.08.2018