Ở đây có 1 bài viết khá chi tiết về lỗi include trong PHP:
http://hvaonline.net/hvaonline/posts/list/3242.html
Tuy nhiên cách khắc phục thì vẫn còn đang được thảo luận . Trong ấy có nói đến cách khắc phục là đặt trong file cấu hình PHP:
Code:
allow_url_fopen = off
register_globals=off
Mình nghĩ cách này khá ổn. Tuy nhiên trong trường hợp mình không can thiệp được vào file cấu hình PHP thì đành phải dùng cách khác.
Có thể làm bằng 2 cách:
- Cách 1: Nếu có thể dùng đường dẫn trực tiếp thì nên dùng, ví dụ như thay vì
Code:
$dir = ”/home/”;
include($dir . "page.php");
thì dùng luôn
Code:
include("/home/page.php");
- Cách 2: Kiểm tra và gán lại giá trị của biến include, để đảm bảo rằng nó không bị người khác gán hộ
Ví dụ thay vì viết:
Code:
if (!isset($dir)) $dir = "/home/"; // hoặc không có dòng này
...
include($dir . "page.php");
thì viết là:
Code:
$dir = "/home/";
include($dir . "page.php");
Đây là ví dụ 1 lỗi điển hình thuộc dạng này:
http://hvaonline.net/hvaonline/posts/list/4816.html
Khắc phục lỗi này, quan trọng nhất là kiểm tra các lệnh liên quan đến biến trong include có thể bị gán giá trị khác không. Và để chắc chắn, trước khi dùng include, ta cứ gán lại nó giá trị cần thiết thì sẽ không có vấn đề gì.