2012-12-06 17 views
9


Tôi muốn kiểm tra xem 'dbas.php' có được đưa vào 'ad.php' hay không. Tôi đã viết code -
Làm cách nào để kiểm tra tệp php được bao gồm thành công?

ad.php

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

Tôi đã thử nghiệm thành công file_exists() một phần nhưng không biết nếu bao gồm() sẽ làm việc tốt hay không, vì tôi đã thử trong localhost và nếu tệp nằm trong thư mục thì nó không bao giờ không bao gồm. Vì vậy, tôi không biết mã này sẽ hoạt động như thế nào trong máy chủ nếu có nhiều lưu lượng truy cập. Vì vậy, hãy cho tôi biết mã của tôi có đúng không?

-Cảm ơn.

Đã giải quyết: Cảm ơn bạn rất nhiều câu trả lời.

+0

Bạn có thể kiểm tra bằng cách làm cho tệp 'dbas.php' không thể đọc được bởi máy chủ web. Nó sẽ khẳng định nó tồn tại, nhưng không thể bao gồm nó. –

+0

không sử dụng mã bcoz trong mã của bạn khi tệp không tìm thấy nó cho thấy lỗi php và đó là xấu bạn có thể sử dụng bên dưới tôi có mã bưu điện –

+0

mà sẽ không ném bất kỳ lỗi nếu tập tin không tìm thấy trong thư mục.Nếu tệp trong thư mục, chỉ sau đó mã sau sẽ chạy, nếu không sẽ hiển thị "Tải cơ sở dữ liệu không thành công". đó là lý do tại sao tôi đã sử dụng tệp_exists() để kiểm tra xem tệp có nằm trong thư mục hay không. – user1844626

Trả lời

16

Sử dụng php require method phù hợp hơn nếu bạn muốn chắc chắn rằng tệp được bao gồm. file_exists chỉ kiểm tra xem tệp có tồn tại không, nếu nó không thực sự đọc được.

require sẽ xuất hiện lỗi nếu không bao gồm (bạn có thể catch lỗi, xem Câu trả lời của Cerbrus).

Edit:

Tuy nhiên, nếu bạn không muốn kịch bản để ngăn chặn nếu sự bao gồm thất bại, sử dụng phương pháp is_readable cùng với file_exists, như:

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

OP có vẻ như có thể muốn bắt lỗi. Vì vậy, 'yêu cầu 'có lẽ không phải là ý tưởng tốt nhất? –

+0

Có, tôi thích "if (file_exists (" dbas.php ") && is_readable (" dbas.php ") && include (" dbas.php ")) {/ * do stuff * /}" mã này. Cảm ơn bạn đã Cứu giúp. – user1844626

+0

Xem câu trả lời @Cerbrus cho một ví dụ bằng cách sử dụng 'try/catch'. – Alasjo

-1

ghi

echo "file is includ" 

ở phần cuối của "dbas.php"

+0

Mã 'dbas.php' của tôi là Vì vậy, khi tệp được phát hành thì mã cơ sở dữ liệu đang hoạt động trên trang. Tôi muốn biết đó là mã của tôi đúng để kiểm tra các tập tin bao gồm nếu nhiều lưu lượng truy cập được trong máy chủ. (Im không chắc chắn về nguyên nhân đó tôi đã kiểm tra trong localhost chỉ. Không biết là nó ok cho nhiều máy chủ lưu lượng truy cập hay không.) – user1844626

0

file_exists("dbas.php") Là làm việc kiểm tra. Nếu nó tồn tại, sau đó làm bao gồm.

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

Đặt chức năng của bạn trong một chức năng và sử dụng function_exists để kiểm tra xem nó có ở đó không.

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

Trong trường hợp của bạn, các tập tin incusion sẽ

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

và tập tin chính:

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

Tôi đã có một ý tưởng từ mã của bạn, tôi sẽ ban đầu một biến trong tập tin dbas.php và sẽ kiểm tra trong ad.php nếu giá trị là chính xác. sau đó sẽ chắc chắn nếu dbas.php được bao gồm thành công hay không. $ i = 100; // Tôi sẽ thêm dòng này vào dbas.php. và sẽ kiểm tra xem trong ad.php Làm thế nào về điều này? – user1844626

+0

Tôi sẽ không làm như vậy. Tôi sẽ đặt mã kết nối cơ sở dữ liệu của bạn vào một hàm, kiểm tra sự tồn tại của nó và gọi nó. Sau đó bạn sẽ có thể xử lý sự thất bại kết nối hơn rất nhiều so với 'echo'-ing hoặc (kinh dị!)' Die'. –

+0

Nếu 'include (" php_file_with_fcn.php ");' không thành công, bạn sẽ không phải kiểm tra xem hàm có tồn tại hay không, bởi vì trang của bạn sẽ trả về lỗi trên bao gồm. Tại sao lại kiểm tra xem nó có tồn tại hay không, nếu nó không thể "không" tồn tại, khi bao gồm xảy ra? – Cerbrus

0

Sử dụng mã này thay vì mã của bạn, bởi vì trong mã của bạn nếu tập tin là không tồn tại trong máy chủ thì lỗi php phát sinh và điều đó không tốt nên sử dụng mã này:

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

Mã này có nghĩa là nếu tệp tồn tại trên máy chủ thì chức năng bao gồm tệp khác không được tìm thấy echo.

+0

_ "sau đó lỗi php phát sinh và điều đó không tốt" _ Ý bạn là gì? lỗi php tốt hơn là lặp lại rằng không tìm thấy tệp, vì thường có nhiều thông tin hơn trong lỗi. – Cerbrus

+0

vâng tôi hoàn toàn đồng ý với bạn nhưng trong ux điều đó không tốt đó là lý do tại sao đang nói –

8

Đơn giản chỉ cần sử dụng 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. 
} 

Cái gì đó đã không được đề cập được nêu ra: bạn có thể thêm một boolean, như:

$dbasIncluded = true; 

Trong file dbas.php của bạn, sau đó kiểm tra cho boolean trong mã của bạn. Mặc dù nói chung, nếu một tệp không bao gồm đúng cách, bạn muốn php nhấn phanh, thay vì hiển thị phần còn lại của trang.

+0

+1 vì nó không lặp lại tên tệp, như trong các trả lời khác. – Claudix

+3

Nhưng điều này không hoạt động, phải không? Yêu cầu ném lỗi nghiêm trọng, không thể bắt được với try/catch. – Frodik

Các vấn đề liên quan