@ygen

Не считывает первую строку в CSV?

Есть функция для считывания данных из csv формата. На локальном компьютере всё работает без проблем. На одном из серверов всё считывает нормально.
Но на сервере заказчика перестает считывать первую строчку.
00d668eb2f71450198e6a366b16d1d08.png9a3e58639a514725b2db8195d1fd3bca.png

Не могу понять, в чём может быть проблема. В скрипте стоит кодировка utf-8. На сайте заказчика windows-1251.

class CSV {

    private $_csv_file = null;

    /**
     * @param string $csv_file  - путь к csv-файлу
     */
    public function __construct($csv_file) {
        if (file_exists($csv_file)) { //Если файл существует
            $this->_csv_file = $csv_file; //Записываем путь к файлу в переменную
        }
        else throw new Exception("Файл \"$csv_file\" не найден"); //Если файл не найден то вызываем исключение
    }

        /**
     * Метод для чтения из csv-файла. Возвращает массив с данными из csv
     * @return array;
     */
    public function getCSV() {
        $handle = fopen($this->_csv_file, "r"); //Открываем csv для чтения

        $array_line_full = array(); //Массив будет хранить данные из csv
        while (($line = fgetcsv($handle, 0, ";")) !== FALSE) { 
            $array_line_full[] = $line; //Записываем строчки в массив
        }
        fclose($handle); //Закрываем файл
        return $array_line_full; //Возвращаем прочтенные данные
    }

}

Выводим значение из 2 и 0 колонки. Значение 0 колонки на сервере заказчика - пустое.
foreach ($get_csv as $value) { //Проходим по строкам
	printf('name('.$value[2].')="'.prettyurl($value[2]).'"     name('.$value[0].')="'.prettyurl($value[0]).'"<br>');
}


Просьба помочь с решением проблемы. Спасибо.
  • Вопрос задан
  • 355 просмотров
Пригласить эксперта
Ответы на вопрос 1
@ygen Автор вопроса
Проблема решена. Первая строка была на русском. Как я и предполагал.

Добавляем перед считыванием из файла код:
<?php
	header('Content-type: text/html; charset=utf-8');
	if(!setlocale(LC_ALL, 'ru_RU.utf8')) setlocale(LC_ALL, 'en_US.utf8');
	if(setlocale(LC_ALL, 0) == 'C') die('Не поддерживается ни одна из перечисленных локалей (ru_RU.utf8, en_US.utf8)');

	$handle = fopen('php://memory', 'w+');
	fwrite($handle, iconv('CP1251', 'UTF-8', file_get_contents('test.csv')));
	rewind($handle);
	while (($row = fgetcsv($handle, 1000, ';')) !== false) print_r($row);
	fclose($handle);
?>
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы