Результаты fgetcsv различаются при локальном и серверном запуске?

Я использовал fgetcsv() для извлечения некоторых данных из CSV-файла. Вот код:

<?php
$csv = fopen("csv/contracts.csv","r");
while(!feof($csv)){
    $line = fgetcsv($csv,1024);
    if($line[0] == '')
        continue;
?>
    <li><?php echo "$line[2] - $line[3]"; ?></li>
<?php
}
?>

Это отлично работает на моем локальном компьютере, но становится катастрофой, когда я загружаю его на свой сервер! Я передал $delimiter с "," на fgetcsv(), но ничего не изменилось!
Что не так?
Версия PHP:
На локальном компьютере: 5.3.5
На сервере: 5.2.17

[EDIT]
Мой локальный вывод выглядит следующим образом:

s1 - t1
s2 - t2
s3 - t3
s4 - t4

Но на сервере:

-
-
s3 - 
s4 -

person Pedram Behroozi    schedule 12.11.2011    source источник
comment
Пожалуйста, дайте определение «катастрофе» — что именно происходит не так?   -  person Quasdunk    schedule 12.11.2011
comment
Просто идея: дефис можно рассматривать как оператор вычитания. Вы пробовали это: <?php echo $line[2] . ' - ' . $line[3]; ?>?   -  person Quasdunk    schedule 12.11.2011
comment
Я пытался. Не повезло. Спасибо, в любом случае   -  person Pedram Behroozi    schedule 12.11.2011
comment
Это также может иметь какое-то отношение к окончаниям строк (особенно, если вы работаете с окнами локально и загружаете их на сервер Linux). Взгляните на это: stackoverflow.com/q/2321064/690897 и некоторые связанные сообщения, возможно, вы найдете что-то там. Еще одна частая проблема — это такие вещи, как \" в CSV.   -  person Quasdunk    schedule 12.11.2011
comment
Хм... Хорошая догадка. Я добавил ini_set('auto_detect_line_endings',TRUE);, но не решил проблему. Я также просмотрел свой CSV-файл с помощью cPanel на сервере. Вроде все в порядке!   -  person Pedram Behroozi    schedule 12.11.2011
comment
Могу ли я предложить перенести fgetcsv в состояние цикла while. while($line=fgetcsv("file.csv",1024,',') !== FALSE) {. Пусть fgetcsv перемещает указатель файла вдоль, а не feof. И хорошая идея — всегда включать разделитель!   -  person David Barker    schedule 12.11.2011


Ответы (1)


Я думаю, вы протестировали код локально на машине с Windows, а сервер - Linux. Формат файла в linux и windows разный. Конец строки, а также некоторые другие вещи в linux отличаются от windows. Проверьте свой код в Linux (поскольку ваш сервер Linux), а затем попробуйте на сервере. я думаю там все будет хорошо...

person Akhil Thayyil    schedule 12.11.2011