Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Вывод из CSV файла
Форумы портала PHP.SU » PHP » Программирование на PHP » Вывод из CSV файла

Страниц (2): [1] 2 »
 

1. Mister - 20 Апреля, 2010 - 21:51:21 - перейти к сообщению
В общем проблема следующая: скрипт содержит код:
PHP:
скопировать код в буфер обмена
  1.  
  2. <table border="1" width="750" cellpadding="2" cellspacing="2" color="gray" align="center" frame="above" rules="rows" bgcolor="#FCF5E2">
  3.         <tr>
  4.                 <td align="center" width="80"><b>№п/п</b></td>
  5.                 <td width="140"><b>Место</b></td>
  6.                 <td width="360"><b>Профессия</b></td>
  7.                 <td width="90"><b>Зарплата</b></td>
  8.                 <td width="80"><b>Дата публикации</b></td>
  9.         </tr>
  10. <?PHP
  11. $f = fopen ("vakant.csv","r") or die ("Невозможно открыть файл");
  12. for ($i=1; $data=fgetcsv($f,1000,";"); $i++) {
  13. $num = count($data);
  14. echo "<tr><td align=\"center\">$i</td>";
  15. for ($c=0; $c<$num; $c++)
  16. print "<td>$data[$c]</td>";
  17. echo "</tr>";
  18. }
  19. ?>
  20. </table>
  21.  

Соответственно выводит из файла данные вида:

г. Сухиничи;ОХРАННИК;5000;29.03.2010
г. Сухиничи;ВРАЧ;5500;29.03.2010
г. Сухиничи;ПОЧТАЛЬОН;5000;29.03.2010
г. Сухиничи;ВРАЧ;5500;29.03.2010
г. Сухиничи;ВРАЧ;5500;29.03.2010
г. Сухиничи;ВРАЧ;5500;29.03.2010
г. Сухиничи;ВРАЧ;5175;29.03.2010
г. Сухиничи;ВРАЧ;5176;29.03.2010
г. Сухиничи;ВРАЧ;5626;29.03.2010
г. Сухиничи;МЕДИЦИНСКАЯ СЕСТРА;4966;29.03.2010
г. Сухиничи;НАЛАДЧИК ТЕХНОЛОГИЧЕСКОГО ОБОРУДОВАНИЯ;8500;29.03.2010

Так вот проблема в следующем, локально всё работает без проблем и на одном хостинге тоже работает без проблем, но при переезде на другой хостинг возникают проблемы с выводом.

А должно быть так(как на локальном компе и на другом хостинге):

Подскажите, в чём проблема?
2. altermann - 21 Апреля, 2010 - 00:02:34 - перейти к сообщению
лишний тег в echo "</td></tr>"
3. Mister - 21 Апреля, 2010 - 07:26:45 - перейти к сообщению
Тэг убрал, но проблема не в нём. Почему-то сама функция как-то обрезает и неправильно выводит данные по разделителю. Я просто не знаю как по-другому может буть.
4. Мелкий - 21 Апреля, 2010 - 09:55:33 - перейти к сообщению
Смотрите HTML-код на выходе и ищите ошибку там для начала.
5. Mister - 21 Апреля, 2010 - 10:16:55 - перейти к сообщению
C html кодом всё в порядке. У меня как-то некорректно работает функция fgetcsv
6. Makkin - 21 Апреля, 2010 - 10:18:46 - перейти к сообщению
Если на разных хостингах ведет себя по разному, то может дело в открытии файла vakant.csv. попробовать другие ключи открытия ... вместо r указать rt или rb.
7. Mister - 21 Апреля, 2010 - 11:31:11 - перейти к сообщению
Открывает он нормально, дело в том что неправильно считывает.
8. Makkin - 21 Апреля, 2010 - 12:45:28 - перейти к сообщению
Я про считывание и говорю:

"Разные семейства операционных систем имеют разные соглашения относительно окончанийя строк. ...
Если вы используете неверный символ конца строки при редактировании файлов, вы можете обнаружить, что при открытии эти файлы "смешно выглядят"."

http://www.php.su/functions/?fopen
9. Mister - 21 Апреля, 2010 - 13:39:13 - перейти к сообщению
Попросил на хостинге сменить версию php с 5.2.3 на 4.4.9 , чтение из файла заработало. Но теперь на сайте масса других проблем, так что придётся переписывать скрипт заново.
10. JustUserR - 21 Апреля, 2010 - 13:54:38 - перейти к сообщению
Mister пишет:
Сменить версию php с 5.2.3 на 4.4.9 , чтение из файла заработало
Скорее всего дело не в версии PHP а в настройках базовых путей и safe_mode если он имеется
11. altermann - 21 Апреля, 2010 - 13:56:46 - перейти к сообщению
А вы не пробовали просто считать строку из файла функцией fgets и вручную разбить строку функцией explode(";", $data).

Поставьте уровень ошибок E_ALL, может он какое-нибудь предупреждение выкидывает.
12. JustUserR - 21 Апреля, 2010 - 14:11:22 - перейти к сообщению
altermann Лучше всего проверить доступ к файлу или папке это попробовать получить dir с помощью system и посмотреть если ли реальный доступ и в какой папке вы находитесь
13. Mister - 21 Апреля, 2010 - 15:02:19 - перейти к сообщению
Доступ к файлу есть, только он разбивает строку не так как должен, а почему-то спотыкается на точках и некоторые элементы вообще теряет.

altermann пишет:
А вы не пробовали просто считать строку из файла функцией fgets и вручную разбить строку функцией explode(";", $data).

Видимо придётся делать так, но ведь в php 5.2.3 есть функция fgetcsv, её использовать проще.
14. JustUserR - 21 Апреля, 2010 - 17:11:52 - перейти к сообщению
Mister пишет:
А почему-то спотыкается на точках и некоторые элементы вообще теряет
Конечно могут сказываться особенности функции под разные версии PHP и платформы - однако нельзя исключать что данное явление происходит из-за несовместимости с кодирокой или например символа перевода строки (Как например Perl под windows игнорирует символ \r - а под *nix программы с таким символом между инструкциями кода работать не будут)
15. Makkin - 21 Апреля, 2010 - 19:08:42 - перейти к сообщению
Mister пишет:
Видимо придётся делать так, но ведь в php 5.2.3 есть функция fgetcsv, её использовать проще.

Mister, так ключ то поменять не пробовал? или думаешь в этом не может скрываться косяк?
JustUserR тоже пишет про то что в разных системах может по разному обрабатывать конец строки.
"Так как установка флага трансляции по умолчанию зависит от SAPI и версии PHP, которую вы используете, рекоммендуем явно задавать указанный флаг из соображений портируемости."

 

Powered by ExBB FM 1.0 RC1