Заархивировано

Эта тема находится в архиве и закрыта для дальнейших ответов.

Джедай

помощь в отладке скриптов Php

Рекомендуемые сообщения

Воту меня такая проблема

Вот у меня оч. большая проблема.

 

Я присваиваю перменной некотрое значение

 

$file="tpl/messages.txt";

 

Далле я в другую перменную вгоняю файл (его содержимое)

 

  $read = fopen($file, "r") or die("<br><table border=1 bordercolor=green cellspacing=0 cellpadding=60 width=35%><tr align=center><td bgcolor=#tf1101><font color=red face=Verdana size=3><b><img src=\"img/error.gif\"> Не могу открыть базу сообщений на чтение. Наверное, у вас кривые руки.</td></tr></table>");

 

Код в html это красивый ответ на случай если не удается прочитать файл.

 

---

 

Далее я с самого начала файла читаю строку да знака абзаца (\n)

 

и загоняюю в перменную:

 

 $strock=fgets($read, "109999"); 

 

Далле создаем массив и загоняем в него эту строку, поделив его на 4 подстроки (| - таким вот символом я обозначил границы между подстроками). Т.е. массив состоит из 4 ключей, в каждый из которых я загнал подстроки.

 

 $a=explode("|",$strock,4); 

 

Далее идут простые команды нарисовать табличку, разбросав по ячейкам значения ключей массива $a.

 

Print "<br><table border=1 bordercolor=green cellspacing=0 cellpadding=0 width=35%>";
print "<tr valign=top><td width=100% bgcolor=#tf1101><font color=limegreen face=Verdana size=3><p align=center><table border=1 bordercolor=green><tr><td width=50% bgcolor=green><font color=black size=1><i><b> $a[0]</i></b></td><td width=40% bgcolor=green><font color=black size=1><a href=\"mailto:$a[1]\">$a[1] </a></td><td width=50% bgcolor=green><font color=black size=1>$a[3]</td></tr></table><br>$a[2]<br> </p></font></td></tr></table>";

 

Вот выложил. Но... В табличке есть тока одна строка, а в файле $file 2 строки.

 

Так вот я попытался вывести эти 2 строки на экран, раскидав значения ключей массива по ячейкам табличек.

 

Использовал цикл do...white

 

Вот код:

 


do {

$strock=fgets($read, "109999");
$a=explode("|",$strock,4);
Print "<br><table border=1 bordercolor=green cellspacing=0 cellpadding=0 width=35%>";
print "<tr valign=top><td width=100% bgcolor=#tf1101><font color=limegreen face=Verdana size=3><p align=center><table border=1 bordercolor=green><tr><td width=50% bgcolor=green><font color=black size=1><i><b> $a[0]</i></b></td><td width=40% bgcolor=green><font color=black size=1><a href=\"mailto:$a[1]\">$a[1] </a></td><td width=50% bgcolor=green><font color=black size=1>$a[3]</td></tr></table><br>$a[2]<br> </p></font></td></tr></table>";}

 

и было это све с таким условием

 

white ($strock!=="");

 

То есть, если значение переменной не пустое (еще есть строки в файле), то он рисует табличку в ней раскидывает подстроки по ячейкам.

 

В общем все было бы кульно, но....

 

потом просто все зацикливаектся и виснит :(

 

Помогите сделать, так чтобы у меня выводились все строки, и чтобы при ентом не зацикливался код.

 

Буду очень признателен.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

это не проблема - это №уйня

<?
$filename = "tpl/messages.txt";
$content = file ($filename);
$contentstring = explode("\n", $content);
for($i=0;$i<sizeof($contentstring);$i++)
  {
  $string = explode("|", $contentstring[$i]);
  ///разбор массива $string по ячейкам таблицы
  }
?>

на phpclub.net

тебя послали бы читать фак :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Че-то ты писец, как криво код оформил - читать невозможно. Я и не читал. Если в конце виснет, может, feof надо юзать? Вощем, читать впадлу))

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

tHunder

если ты про меня, Гриш - то мне пох на оформление - надо будет разберется :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

mr.Faster Нет, я не про тебя :-) Я про джедая)))

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Кароч, я все сам уже сделал, без вашей помоши.

function mes_view($file) {
$file="tpl/messages.txt";
$read = file($file);
for ($i=0; @$read[$i]>""; $i=$i+1){
$a=explode("|",$read[$i],4); 
$number=$i+1;
Print "<br><table border=1 bordercolor=green cellspacing=0 cellpadding=0 width=430>";
print "<tr valign=top><td width=430 bgcolor=#tf1101><font color=limegreen face=Verdana size=2><p align=center><table border=1 bordercolor=green><tr><td width=165 bgcolor=green><font color=black size=1><i><b>".HtmlSpecialChars($a['0'])."</i></b></td><td align=center width=165 bgcolor=green><font color=black size=1><a href=\"mailto:$a[1]\">".HtmlSpecialChars($a['1'])." </a></td><td width=100 bgcolor=green><font color=black size=1>".HtmlSpecialChars($a['3'])."</td></tr></table><br>".HtmlSpecialChars($a['2'])."<br> </p></font></td></tr><tr align=right><td bgcolor=#tf2525 width=430><font face=Verdana size=1 color=blue><i>Сообщение <b>№ $number</b> </i></td></tr></table>";
}
}

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ну, ты крут :-)

Особенно круто смотрится в цикле

$i=$i+1

:D

Как-то необычно :D

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Как-то необычно 

$i - номер строки в файле.

Он проверяет -если и $I>"" т.е. она не путсая то он выводит строку и потом прибавляет к $i - 1

И возвращается обратно. Но читает уже не строку 0, а 0 +1 , и снова если она имеет текст, то он выводит и приплюсовыввает опять.

и так до тех пор, пока цикл не натолкнется на такое, которое будет равно ""

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Джедай

принято писать

$i++

об это и сказал tHunder

Добавлено:

зы: еще есть функция file которая читает файл построчно в массив....

Добавлено:

ззы:но это совсем другая история :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Джедай

$i - номер строки в файле.

Он проверяет -если и $I>"" т.е. она не путсая то он выводит строку и потом прибавляет к $i - 1

И возвращается обратно. Но читает уже не строку 0, а 0 +1 , и снова если она имеет текст, то он выводит и приплюсовыввает опять.

и так до тех пор, пока цикл не натолкнется на такое, которое будет равно ""

Ой, спасибо за объяснение :)

А я-то (зарабатывая на жизнь программированием; в частности, на PHP) и не знал, зачем это нужно :)

 

mr.Faster

принято писать

$i++

Бинго! ;-)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

я именнно этой функцией и воспользовался.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Джедай, мне твой код очень не нравится. Думаю будут проблемы с быстродейтвием скрипта. Да и оформлено это все крайне некрасиво и непонятно.

Использовал цикл do...white
white ($strock!=="");

Ты бы так не торопился, а то вот такие вот ошибки вкрадываются ;)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Alexey333

Ну у меня все щас работает и быстро, кто хочет посмотреть качайте тут http://forum.comchatka.ru/showthread.php?t=6740

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Alexey333

Да и оформлено это все крайне некрасиво и непонятно.

сорри если вмешиваюсь, но имхо красота оформления имеет значение лишь для понятности вопроса.

какая нахрен скрипту разница как он оформлен? важно - работает. работает - не трожь :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Ну у меня все щас работает и быстро, кто хочет посмотреть качайте тут http://forum.comchatka.ru/showthread.php?t=6740

Ага, качайте...требует регистрации даже для просмотра. Пытаюсь зарегиться, а он мне "Извините, регистрация отключена администрацией" :)

имхо красота оформления имеет значение лишь для понятности вопроса.

какая нахрен скрипту разница как он оформлен? важно - работает. работает - не трожь

Для самого программиста это очень неудобно. Потом захочет скрипт модифицировать, и тут могут возникнуть проблемы. Да и сделает паузу в программировании, захочет вспомнить, да сам не разберет, что делал ;)

Тут все таки аккуратность важна.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Alexey333

Для самого программиста это очень неудобно. Потом захочет скрипт модифицировать, и тут могут возникнуть проблемы. Да и сделает паузу в программировании, захочет вспомнить, да сам не разберет, что делал

Тут все таки аккуратность важна.

Это уже другой вопрос. Лично я себе ставлю ремарки всякие. Короче, свои методы отмечать что, как и почему, зачем какие куски кода и т. д. Табы тут роли не играют, хотя присутствуют :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Alexey333

в принципе я согласен.

скажи - ты много серверным программингом занимался?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Лично я себе ставлю ремарки всякие. Короче, свои методы отмечать что, как и почему, зачем какие куски кода и т. д. Табы тут роли не играют, хотя присутствуют

Я вообще-то не только про комментарии говорил.

Просто можно сам код так оформить, что понятно будет что к чему. Да и, как известно, одну и ту же задачу можно решить разными способами. Так вот надо всегда тщательно продумывать оптимальное решение на перспективу.

Я вот сначала тоже писал крайне неоптимально. Но когда данных мало, то разница обычно не чувствуется. Тогда я решил проверить: набил свои файлы десятками тысяч (около 100000) записей и проверил. Оказалось, что мой скрипт стал выполняться где-то 10-15 секунд и больше (на некоторых страничках даже больше 30!) , что, естественно, совершенно неприемлемо. Тогда пришлось искать решение данной проблемы. В результате та же самая задача выполнилась на моем слабеньком компьютере максимум за 1-2 секунды с таким количеством данных.

Что касается удобства, то тоже надо смотреть по обстоятельствам: возможно где-то удобнее написать функцию и вызывать ее, а не прописывать каждый раз одно и то же и т.д.

скажи - ты много серверным программингом занимался?

Достаточно (только на PHP). Правда я не использую MySQL.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

у меня это все очень скоро и некогда красоту наводить, после тестинга остаются кучи комментов, поскольку - главное быстро и вовремя решить задачу, время == деньги

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я конечно понимаю, что надо делать лучше. Но я еще только начинаю изучать язык, а вы уже меня оценили, будто я опытный программер написал такую стремную прогу. Ан нет.

Я язык изучаю около 2 недель и причем самостоятельно, когда свободное время есть.

А в проге своей я разбираюсь очень даже хорошо. Понимаю, что где есть.

А тем временем читаю учебник дальше :) Потом прочитаю еще раз, для того чтобы уяснить не понятое.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
PHP без MySQL - время на ветер

Категорически не согласен. У MySQL никаких особых преимуществ перед файлами нет.

1. Скорость? При правильном написании скрипта скорость будет почти одинаковая.

2. Удобство? Опять же как построишь. В некоторых случаях файлы гораздо удобнее и практичнее.

 

Просто так психологически сложилось, что база круче.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты