2012-12-06 8 views
9


Chcę sprawdzić, czy "dbas.php" jest zawarty w "ad.php". Napisałem kod -
Jak można sprawdzić, czy plik php został pomyślnie dołączony?

ad.php

<?php if(file_exists("dbas.php") && include("dbas.php")){ 
// some code will be here 
} 
else{echo"Database loading failed";} 
?> 

pomyślnie przetestowała file_exists (część), ale nie wiem, czy to() działa dobrze, czy nie, bo ja wypróbowany w localhost i jeśli plik znajduje się w katalogu, to nigdy nie zawodzi. Tak więc nie wiem, jak ten kod zachowałby się na serwerze, gdyby był tam duży ruch. Proszę mi powiedzieć, czy mój kod jest poprawny?

-Dziękuję.

rozwiązany: Dziękuję bardzo za odpowiedzi.

+0

Można to przetestować, uniemożliwiając odczytanie pliku 'dbas.php' przez serwer WWW. Potwierdzi, że istnieje, ale nie może go uwzględnić. –

+0

Nie używaj kodu bcoz w kodzie, gdy plik nie zostanie znaleziony, pokazuje błędy PHP i to jest złe, czego możesz użyć poniżej, mam kod pocztowy –

+0

, który nie rzuciłby żadnego błędu, jeśli plik nie został znaleziony w katalogu.Jeśli plik w katalogu, tylko poniższy kod zostanie uruchomiony, w przeciwnym razie wyświetli się komunikat "Ładowanie bazy danych nie powiodło się". Dlaczego użyłem file_exists() do sprawdzenia, czy plik znajduje się w katalogu. – user1844626

Odpowiedz

16

Używanie PHP require method jest bardziej odpowiedni, jeśli chcesz mieć absolutną pewność, że plik jest włączone. file_exists sprawdza tylko, czy plik istnieje, a nie czy jest rzeczywiście czytelny.

require będzie produkować błąd, jeśli nie powiedzie się włączenie (można catch błędu, patrz odpowiedź Cerbrus').

Edit:

Jednakże, jeśli nie chcesz skrypt do powstrzymania jeżeli uwzględnienie nie powiedzie się, należy użyć metody is_readable wraz z file_exists, jak:

if(file_exists("dbas.php") && is_readable("dbas.php") && include("dbas.php")) { 
    /* do stuff */ 
} 
+0

OP wydaje się być w stanie chcieć złapać błąd. Więc 'require' to może nie jest najlepszy pomysł? –

+0

Tak, podobało mi się "if (file_exists (" dbas.php ") && is_readable (" dbas.php ") && include (" dbas.php ")) {/ * do stuff * /}" ten kod. Dzięki za twoje Wsparcie. – user1844626

+0

Zobacz odpowiedź @Cerbrus na przykład za pomocą 'try/catch'. – Alasjo

-1

zapisu

echo "file is includ" 

na końcu "dbas.php"

+0

mój kod "dbas.php" to Tak więc, gdy plik jest włączony, kod bazy danych jest aktywny na stronie. Chcę wiedzieć, że mój kod jest poprawny, aby sprawdzić włączenie pliku, jeśli duży ruch jest na serwerze. (Nie jestem pewien o tym, dlaczego sprawdziłem w localhost only.so nie wiem, czy jest to w porządku dla dużego serwera ruchu, czy też nie.) – user1844626

0

file_exists("dbas.php") robi sprawdzanie. Jeśli istnieje, zrób to.

if(file_exists("dbas.php"){ 
    include("dbas.php") 
    //continue with you code here 
} 
0

Wskaż swoją funkcjonalność w funkcji i użyj function_exists, aby sprawdzić, czy tam jest.

include ("php_file_with_fcn.php"); 
if (function_exists("myFunc")) { 
    myFunc(); 
    // run code 
} else { 
    echo "failed to load"; 
} 

w Twoim przypadku, plik incusion byłoby

function db_connect() { 
    $user = "user"; 
    $pass = "pass"; 
    $host = "host"; 
    $database = "database"; 
    mysql_connect($host, $user, $pass); 
    return mysql_select_db($database); 
} 

oraz główny plik:

include("db_connect.php"); 
if (function_exists("db_connect")) { 
    if (db_connect() === TRUE) { 
     // continue 
    } else { 
     // failed to connect (this is a different error than the "can't include" one and 
     // actually **way** more important to handle gracefully under great load 
    } 
} else { 
    // couldn't load database code 
} 
+0

Mam pomysł z twojego kodu, chciałbym zapisać zmienną w pliku dbas.php i sprawdzi się w ad.php, jeśli wartość jest prawidłowa. wtedy byłby pewien, czy plik dbas.php został pomyślnie dołączony, czy nie. $ i = 100; // Dodałbym tę linię do dbas.php. i sprawdzi to w ad.php Co powiesz na to? – user1844626

+0

Nie zrobiłbym tego w ten sposób. Chciałbym umieścić kod połączenia z bazą danych w funkcji, sprawdzić jego istnienie i zadzwonić. Wtedy będziesz w stanie poradzić sobie z awarią połączenia o wiele bardziej wdzięczną niż "echo" lub (horror!) 'Die'. –

+0

Jeśli 'include (" php_file_with_fcn.php ");' zawiedzie, nie będziesz musiał sprawdzać, czy ta funkcja istnieje, ponieważ twoja strona zwróci błąd na dołączeniu. Po co sprawdzać, czy istnieje, czy nie może "nie" istnieć, kiedy występuje? – Cerbrus

0

użyć tego kodu, zamiast kodu, ponieważ w kodzie, jeśli plik jest nie istnieje na serwerze, pojawiają się błędy php, a to nie jest dobre, więc użyj tego kodu:

if(file_exists("dbas.php")) { 
    include_once("dbas.php"); 
} else { 
    echo"file is not found"; 
} 

Ten kod oznacza, że ​​jeśli plik istnieje na serwerze, to funkcja include else nie zostanie znaleziony plik echo.

+0

_ "wtedy pojawiają się błędy PHP i to nie jest dobre" Co masz na myśli? Błędy PHP są lepsze niż echo, ponieważ plik nie został znaleziony, ponieważ w błędzie jest generalnie więcej informacji. – Cerbrus

+0

Tak, całkowicie się z Tobą zgadzam, ale w Ux, który nie jest dobry, dlatego mówię –

8

Wystarczy użyć require:

try { 
    require 'filename.php'; 
} catch (Exception $e) { 
    exit('Require failed! Error: '.$e); 
    // Or handle $e some other way instead of `exit`-ing, if you wish. 
} 

coś, co nie zostało jeszcze wymienić: ty mógłby dodać wartość logiczną, jak:

$dbasIncluded = true; 

W pliku dbas.php, a następnie sprawdzić na tej wartości logicznej w twoim kodzie. Chociaż ogólnie rzecz biorąc, jeśli plik nie zawiera poprawnie, to chcesz, aby php używał hamulców, zamiast renderować resztę strony.

+0

+1, ponieważ nie powtarza nazwy pliku, tak jak w innych odpowiedziach. – Claudix

+3

Ale to nie działa, prawda? Wymagaj rzutu śmiertelnego błędu, którego nie można złapać za pomocą try/catch. – Frodik