Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Dziwny problem po migracji PHP 5.0.4 => 5.2.5
Forum PHP.pl > Forum > PHP
krowal
Po podniesieniu wersji PHP pojawia mi sie dziwny problem przy aplikacji która wcześniej uruchamiała się bez zarzutu. Po uruchomieniu aplikacji wywala mi kawałem pliku PHP w postaci czystego kodu... zaczynając od dziwnego miejsca i kończąc na znaczniku zamykającym plik czyli '?>'. Napisałem że zaczyna od dziwnego miejsca bo nie są to ani ciapki rozpoczynające ciąg znaków, ani też zwykłe cudzysłowy, najlepiej jak przedstawię to na przykładzie:
na początek plik przy którym jest problem:
  1. <?
  2.  
  3. class Kreditor {
  4. function runKreditor($pno, $fname, $lname, $street, $postno, $city, $orderNr, $products, $delivery) {
  5. include ("modules/kreditor/kreditor.php"); //Include kreditor.php
  6. $eid = 0000; //Zmienilem numerek do posta na forum
  7.  
  8. $estoreUser = '';
  9. $secret = "xxx"; //Zmienilem haslo do posta na forum
  10. $estoreOrderNo = $orderNr;
  11. $newProduct = array();
  12.  
  13. foreach ($products as $product) {
  14. if (($product["amount"] > 0) && ($product["price"] > 0)) { // #### TO TUTAJ ZACZYNA SIĘ WYŚWIETLANIE KODU
  15. $goodsList[] = mk_goods(intval($product["amount"]), $product["art_code"], $product["name"], $product["price"], 25, 0);
  16. }
  17. }
  18.  
  19. $shipmentfee = $delivery;
  20. $shipmenttype = $NORMAL_SHIPMENT;
  21. $handlingfee = 2320;
  22. $addr = mk_addr_se("", $street, $postno, $city, "", "", "");
  23.  
  24. $passwd = "";
  25. $clientIp = $_SERVER["REMOTE_ADDR"];
  26. $newPasswd = "";
  27. $flags = '';
  28. if (isset($_GET['auto'])){
  29. if ($_GET["auto"] == "yes")
  30. $flags = $KRED_AUTO_ACTIVATE;
  31. else
  32. $flags = 0;
  33. }
  34.  
  35. if (isset($_GET["pre"])){
  36. if ($_GET["pre"] == "yes")
  37. $flags |= $KRED_PRE_PAY;
  38. }
  39. $comment = ""; //Comment
  40. $ready_date = "";
  41. $rand_string = "";
  42. $status =
  43. add_invoice_se($eid, $estoreUser, $secret, $estoreOrderNo, $goodsList,
  44. $shipmentfee, $shipmenttype, $handlingfee, $pno, $fname,
  45. $lname, $addr, $passwd, $clientIp, $newPasswd, $flags,
  46. $comment, $ready_date, $rand_string, $result);
  47.  
  48. switch ($status) {
  49. case 0:
  50. return 1;
  51. break;
  52. case -99:
  53. return 2;
  54. break;
  55. default:
  56. return 3;
  57. }
  58. }
  59. }
  60. ?>

A oto co dostaję w przeglądarce po wywołaniu adresu pod którym jest cała aplikacja:
jak widać zaczyna od '0' czyli od miejsca które zaznaczyłem w pliku powyżej symbolem '####' (linijka 14)
Kod
0) && ($product["price"] > 0)) { $goodsList[] = mk_goods(intval($product["amount"]), $product["art_code"], $product["name"], $product["price"], 25, 0); } } $shipmentfee = $delivery; $shipmenttype = $NORMAL_SHIPMENT; $handlingfee = 2320; $addr = mk_addr_se("", $street, $postno, $city, "", "", ""); $passwd = ""; $clientIp = $_SERVER["REMOTE_ADDR"]; $newPasswd = ""; $flags = ''; if (isset($_GET['auto'])){ if ($_GET["auto"] == "yes") $flags = $KRED_AUTO_ACTIVATE; else $flags = 0; } if (isset($_GET["pre"])){ if ($_GET["pre"] == "yes") $flags |= $KRED_PRE_PAY; } $comment = ""; //Comment $ready_date = ""; $rand_string = ""; $status = add_invoice_se($eid, $estoreUser, $secret, $estoreOrderNo, $goodsList, $shipmentfee, $shipmenttype, $handlingfee, $pno, $fname, $lname, $addr, $passwd, $clientIp, $newPasswd, $flags, $comment, $ready_date, $rand_string, $result); switch ($status) { case 0: return 1; break; case -99: return 2; break; default: return 3; } } } ?>
Fatal error: Class 'Kreditor' not found in C:\AppServ\www\shop\class_inc\cart.php on line 49

Fatal error oczywiście dlatego że plik w którym opisana jest klasa zamiast się parsować woli wyjść ze źródłem do przeglądarki smile.gif

Na pewno nie chodzi o dołączany plik w include w linii 5, bo po usunięciu tej linii nadal jest problem.
Czy ktoś wie o co chodzi ? może jakieś ustawienia w php.ini ?
templar
A zobacz, co masz w linii 37, bo ja operatora "|=" nie znam, a przynajmniej nie kojarzę, jeśli taki istnieje, to proszę mnie nie bić ;p.
nospor
To poszukaj w manualu w dziale OPERATORY.

@krowal a czy swoje skrypty zaczynasz <? czy <?php Powinienes tym drugim
templar
hmm ano faktycznie taki OR z przypisaniem. czyli nie tu lezy problem ;p. podejrzewam, ze z tym tagiem otwierajacym <?php to tez nie to, co to za roznica.

ja stosuje taka metode, jak cos nie dziala - wymaż linie 13-17 i napisz ten fragment kodu od nowa. moze jakis kruczek jest, ktory ciezko zauwazyc nieraz.

pozdro
nospor
Cytat
podejrzewam, ze z tym tagiem otwierajacym <?php to tez nie to, co to za roznica.
Twoje posty opierają sie na podejrzeniach. Daruj je sobie wiec, ok? Sprawdz jak cos podejrzewasz i jak juz sie upewnisz to pisz. Jasne, można czegoś nie wiedziec, ale tekst z operatorem ktorego rzekomo nie ma (mozna to bylo w minute sprawdzic w manualu), albo podejrzewanie ze doswiadczony uzytkownik plecie trzy po trzy tylko dlatego ze samemu sie o tym nie slyszalo to lekkie przegiecie.
Otoż <?php od <? robi wielka roznice, szczegolnie jak w php.ini jest ustawione by nie akceptowal <? co ostatnio jest ze tak powiem "modne"
A skoro tak sie dzieje po migracji to jest duza szansa ze to wlasnie to (zreszta objawy rowniez na to wskazuja).
krowal
Dzięki, kurcze sam wyłączałem obsługę short_tags w php.ini. A ten skrypt to stary jest i dawno do niego nie zaglądałem, a jako, że już dawno się przestawiłem na <?php to nawet tego nie zauważyłem. Pozdrawiam.
dr_bonzo
trzeba bylo zajrzec do zrodla strony, mialbys caly skrypt a
<? class ...... > 0 zostalo potraktowane jako pierwszy tag smile.gif
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.