Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: php 5.4 fsockopen nie działa
Forum PHP.pl > Forum > PHP
Mlodycompany
Witam. Zaktualizowałem php do wersji 5.4 i zauważyłem, że nie wszystko działa. Na razie napotkałem się na problemy z fsockopen. Nie działa. Nie wiem dlaczego, gdyż nie zwraca błędu, nawet z
  1. ini_set("display_errors", 1);


Wie ktoś co może być nie tak?
Crozin
Według manuala, fsockopen wrzuca błąd wyłącznie w przypadku podania błędnego hosta. Cała reszta błędów jest dostępna spod $errstr - patrz manual.
Mlodycompany
zgadza się, ale wydaje mi się ze fsockopen zwraca error'a a nie warning'a czy cos innego. Po czym wnoszę? Otóż mając kod
  1. fsockopen(...);
  2. echo 1;

nic się nie wyświetla, natomiast gdy zakomentuję linię z fsockopen na ekranie pokazuje się 1
Crozin
Popatrz w manualu jak wygląda poprawna obsługa błędów z fsockopen i zastosuj ją.

PS. Dla display_errors powinieneś przekazać wartość "on", a dla error_reporting -1 zamiast E_ALL.
Mlodycompany
  1. ini_set("display_errors", "On");
  2. echo(true) ? "true" : "false";
  3. fsockopen("wp.pl",80, &$errno, &$errstr, 5);
  4. echo $errstr;


W przeglądarce 0 błedu, 0 nic, kompletnie. W konsoli jak odpaliłem to
Kod
PHP Fatal error:  Call-time pass-by-reference has been removed in...


@edit

Problem po części rozwiązany.
Kod
Note:  There is no reference sign on a function call - only on function definitions. Function definitions alone are enough to correctly pass the argument by reference. As of PHP 5.3.0, you will get a warning saying that "call-time pass-by-reference" is deprecated when you use & in foo(&$a);. And as of PHP 5.4.0, call-time pass-by-reference was removed, so using it will raise a fatal error.


Tylko dlaczego błąd dopiero zobaczyłem w konsoli a nie w przeglądarce? Wiecie coś w tym temacie?
Crozin
A po co dodałeś "&" przed zmiennymi? Referencja jest zdefiniowana w sygnaturze funkcji.
Mlodycompany
Cytat(Crozin @ 30.09.2012, 18:55:49 ) *
A po co dodałeś "&" przed zmiennymi? Referencja jest zdefiniowana w sygnaturze funkcji.


Wiesz co, w 5.3 działało więc to zostawiłem. Nie do końca jeszcze kumam wskaźniki w php...
Crozin
W PHP nie masz dostępu do wskaźników - ta składnia oznacza referencję.

Lektura obowiązkowa: http://php.net/manual/en/language.references.php
Mlodycompany
No ta, pomyliło mi się, referencje miały być. Ok. Dlaczego mi te błędy się nie wyświetlają?
Crozin
W PHP większość kodu (szczególnie tego starego) jest napisana w stylu C, tj. funkcja przy niepowodzeniu zwraca false. Innymi słowy powinieneś sprawdzić czy ini_set wykonało się poprawinie.

PS. echo nie zwraca żadnej wartości, dlatego też nie powinieneś go używać w operatorze trójargumentowym.
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.