2011-02-07 35 views
10

Gần đây khi tôi đã gỡ lỗi một số file PHP với XDebug (dưới Eclipse trên Ubuntu) tôi đã xem qua một hành vi kỳ lạ:Làm thế nào tôi có thể nhận được PHP kỳ diệu làm việc liên tục __FILE__ với Eclipse và PDT

print(__FILE__); 

dẫn đến

"xdebug eval" 

GEE!

Vì vậy, hằng số ma thuật này có vẻ như không phải để làm việc với điều này.

Bất kỳ ai biết cách khắc phục hoặc giải pháp khả thi? Làm cách nào để gỡ lỗi trình gỡ lỗi? (Mã hóa đường dẫn là PITA!)

Trả lời

-1

Tạo điểm ngắt trên đường print(__FILE__); và phân tích biến nào có sẵn cho bạn.

+1

hằng số ma thuật không phải là biến, trình phân tích cú pháp mở rộng chúng. – aexl

0

Không phải là câu trả lời, nhưng bạn có thể sử dụng __DIR__ trong php 5.3.
UPD. Tìm thấy rằng nó thường không chứa những gì bạn mong đợi nó.

7

Kết quả bạn nhận được không chính xác. __FILE__ là một hằng số đặc biệt được đánh giá tại thời điểm phân tích cú pháp. Khi kịch bản PHP được biên dịch, nó sẽ thực sự đọc một cái gì đó như thế này:

// test.php 
<?php 
    "test.php"; 
?> 

mặc dù nguồn kịch bản là:

// test.php 
<?php 
    __FILE__; 
?> 

Điều này có nghĩa rằng sau khi phân tích cú pháp, không có như vậy "liên tục" __FILE__ ở tất cả, vì nó đã được thay thế.

Điều này có nghĩa rằng nếu bạn làm trong một IDE, thông qua DBGp của eval lệnh eval -- __FILE__ nó có thể không cung cấp cho bạn __FILE__ với bất kỳ tên tập tin. Thay vào đó, nó sử dụng tên tệp cho ngữ cảnh hiện tại là xdebug eval hoặc trong các phiên bản sau, xdebug://debug-eval.

Về bản chất, nó giống như làm điều này:

php -r 'eval("__FILE__;");' 

nào cũng kết quả đầu ra:

Command line code(1) : eval()'d code 

Xdebug trông cho loại định dạng, và thay đổi nó để xdebug://debug-eval để nó có thể thực sự gỡ lỗi vào mã được đánh giá.

__FILE__ công trình như mong đợi trong mã nguồn PHP, như có thể chứng minh với đoạn này:

<?php $far = __FILE__; // now evaluate $far in your IDE ?> 
0

Tôi biết đó là một câu hỏi cũ. Tôi giải quyết bằng cách gán nó cho một biến, sau đó nó hoạt động tốt!

$file = __FILE__; 
include dirname($file) . '/../whateverfile.php'; 
Các vấn đề liên quan