Strona 1 z 1

błąd przy generowaniu strony w PHP

: wt gru 14, 2004 12:59 pm
autor: gala
witam,

zrobiłem stronę, z którą mam problem.
Na 1 z 4 serwerów, na których miałem
postawioną do testowania stronę - nie działa
ona dobrze.
Nie generuje się do końca kod.

Strona ma budowe modułową.
Moduły są dołączane poprzez komendę "include".
Dla uproszczenia:
<?
include(naglowek.inc);
include (dane.php)
include (stopka.inc)
?>

W module 'dane' jest odwołanie do bazy MySql.
Błędy są obsłużone programowo - następuje sprawdzenie, czy
udało się połączyć z bazą.
Jeżeli nie, to wyświetlany jest komunikat i kontynuowany
proces generowania strony.

oto kawalek kodu z dane.php:
---------------------------------------------
<?
include("admin/config.php");
$connection = @mysql_connect($serwer,$login,$haslo);
$db = @mysql_select_db($baza, $connection);
if (!$connection or !$db)
{
print "Bląd bazy danych.<br>Zapraszamy za chwilę.";
}
else
{
$a=1;
print $a;
print "wszystko OK!";
}
?>
---------------------------------------------------------

plik admin/serwer.php jest prawidłowy.

Prawidłowo skrypt działa na 3 serwerach.
Natomiast na 1 serwerze powyższy kod, w przypadku błędu połączenia z bazą mysql, nic nie wyświetla - php nic nie generuje, tylko przerywa dzialanie.
Powoduje to, że obcina stopkę strony, która jest dołączana na końcu.

Co się dzieje ?

Re: błąd przy generowaniu strony w PHP

: wt gru 14, 2004 2:53 pm
autor: Krzysztof Kurzydło
cóż
po pierwsze ten kod da się uprościć zamiast dawać konstrukcje warunkową
[php]<?php
if (!$connection OR !$db) {}
?>[/php]
Można po funkcji mysql_connect dodać wyrażenie OR DIE które wyświetla komunikat gdy nie można wykonać jakiejś operacji kod będzie wyglądał następująco
[php]<?php
mysql_connect ($serwer, $login, $haslo) OR DIE ("Bląd bazy danych.<br>Zapraszamy za chwilę.");
?>[/php]

To samo możemy dodać po wywołaniu funkcji mysql_select_db

Re: błąd przy generowaniu strony w PHP

: śr gru 15, 2004 5:39 pm
autor: porneL
Ten felerny serwer nie ma zainstalowanego modułu mysql. Ponieważ masz @ przed mysql_connect to nie widzisz błędu o odwołaniu do nieistniejącej tam funkcji.
Jeśli to nie to, a po usunięciu @ nadal nie widać błędu, to oznacza, że serwer jest rozsądnie skonfigurowany i dla bezpieczeństwa ma całkiem wyłączone pokazywanie błędów.
Możesz wtedy dla testów wykonać:
[php]
error_reporting(E_ALL);
ini_set('display_errors',1);
[/php]
Najlepiej te funkcje wykonać w innym pliku, niż występuje błąd, ponieważ ewentualny parse error uniemożliwi nawet ich wykonanie.