Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] debugowanie kodu..
Forum PHP.pl > Forum > Przedszkole
gox
Witam, oto moj pierwszy skrypt w OO php5 i mam sporo problemow z jego zdebugowaniem:

  1. <?php
  2.  
  3. $t = new telnet('host', '21');
  4. $t->loop();
  5.  
  6. class telnet {
  7.  
  8. public $fp;
  9.  
  10. public __construct($host, $port) {
  11. if (!empty($host) or !empty($port)) trigger_error('telnet __construct - brak hosta/portu', E_USER_ERROR);
  12. if (!preg_match('#^[0-255]{1,3}.[0-255]{1,3}.[0-255]{1,3}.[0-255]{1,3}$#', $host)) {
  13. $ip = gethostbyname($host);
  14. if ($ip != $host) $host = $ip;
  15. else trigger_error("telnet __construct - Bledny host - '$host'", E_USER_ERROR);
  16. }
  17. if ($port < 0 or $port > 65536) trigger_error("telnet __construct - Nieprawidlowy port - '$port'", E_USER_ERROR);
  18. if ( (self::$fp = fsockopen($host, $port)) == false ) trigger_error("telnet __construct - Blad polaczenia!", E_USER_ERROR);
  19. }
  20.  
  21. public __destruct() {
  22. if (@fclose(self::$fp))
  23. return true;
  24. else return false;
  25. }
  26.  
  27. public function loop() {
  28. $out = '';
  29. while(self::$fp) {
  30. $dane = '';
  31. if ($dane = self::input('o.txt') != false) {
  32. fwrite(self::$fp, "$daner");
  33. while(!feof(self::$fp))$out.= fread(self::$fp, 1024);
  34. }
  35. self::ajax($out);
  36. //sleep(1);
  37. }
  38. self::close();
  39. return true;
  40. }
  41.  
  42. private function ajax ($dane) {
  43. $dane = str_replace(''', ''', $dane);
  44. echo '<script type="text/javascript">
  45. $('response').innerHTML = '' . $dane . '';
  46. </script>';
  47. return true;
  48. }
  49.  
  50. private function input ($plik) {
  51. if ($fp = fopen($plik, 'r') == false)
  52. return false;
  53. while(!feof($fp)) $fget.= fgets($fp);
  54. fclose($fp);
  55. unlink($plik);
  56. return $fget;
  57. }
  58.  
  59. }
  60. ?>


Jako pierwszy jest blad: Parse error: syntax error, unexpected T_STRING, expecting T_VARIABLE on line 174

o co mu chodzi?
gox
linia 174 to ta : if (!preg_match('#^[0-255]{1,3}\.[0-255]{1,3}\.[0-255]{1,3}\.[0-255]{1,3}\$#', $host)) {
mike
Stos błędów.

1. Brak słowa kluczowego function dla __construct() i __destruct()
2. Pomylone zdanie logiczne w warunku:
  1. <?php
  2. //...
  3. if (!empty($host) or !empty($port))
  4. //...
  5. ?>
Powinno być:
  1. <?php
  2. //...
  3. if (empty($host) || empty($port))
  4. //...
  5. ?>

3. Następnie:
Cytat
Fatal error: Access to undeclared static property: telnet::$fp
Składową klasy $fp zadeklarowałeś jako zmienną obiektu więc nie możesz odwoływać się do niej statycznie. Powinieneś skorzystać z $this a nie self:
  1. <?php
  2. //...
  3. if (($this->fp = fsockopen($host, $port)) == false)
  4. //...
  5. ?>
Zmiana dotyczy każdego wystąpienia $fp.
4. Złe odwołania do składowych obiektu. Podobnie jak źle odwołujesz się do fp tak samo źle odwołujesz się do ajax() i ii]close()[/i]. Wszędzie powinno być $this->ajax() i $this->close()
5. Brak w klasie funkcji close() wiec powyższe odwołania i tak nie zadziałają.
6. Wychwytywanie sytuacji wyjątkowych zostaw ... wyjątkom. Niepotrzebnie bawisz się w trigger_error stosowanie wyjątków (Exception) jest dużo wygodniejsze i niesie dużo więcej możliwości. Lepiej tak:
  1. <?php
  2. // ...
  3. if (empty($host) || empty($port)) {
  4. throw new Exception(Brak hosta/portu);
  5. }
  6. //...
  7. ?>

7. Linijka:
  1. <?php
  2. if ($fp = fopen($plik, 'r') == false)
  3. ?>
Jest błędna. Powinno być:
  1. <?php
  2. if (($fp = fopen($plik, 'r')) == false)
  3. ?>

8. Złe nawyki i standardy kodowania. Wszystkie bloki kodu ujmujemy w klamry. Pisanie nawet jednowierszowych bloków dla instrukcji if, if ... else, ... jest złe.

Więcej punktować mi się już nie chce. Wystarcz Ci.

A co do błędu, który podałeś to u mnie nie występuje.

To jeszcze tylko dorzucę trzy rzeczy.

9. Funkcja input() jest totalnie niepotrzebna. Słyszałeś kiedyś o file_get_contents() tongue.gif
10. Skrypt wali błędami na potęgę jeśli plik o.txt nie istnieje.
11. Nazwę pliku o.txt powinieneś wyrzucić do zmiennej klasy i dać możliwość ustawienia swojej nazwy.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.