2013-05-07 39 views
7

Tôi đang cố gắng để thực thi mã này:argc biến Undefined PHP

function main(){ 
    if ($argc < 1){ 
    listDir("."); 
    } 
    else{ 
    for($i = 0; $i <= sizeof($argv); $i++){ 
     listDir($argv[$i]); 
    } 
    } 
} 

Nhưng tôi nhận được lỗi sau:

PHP Notice: Undefined variable: argc in /home/me/test.php on line 15 

Tôi nghĩ rằng $ argv và $ argc là biến toàn cục ! Làm thế nào tôi có thể loại bỏ lỗi này? Cảm ơn bạn.

+3

'$ argc' và' $ argv' chỉ được tự động điền khi chạy từ dòng lệnh. Bạn có đang chạy tập lệnh này từ dòng lệnh không? –

+0

+1 @GeorgeCummins Tôi sắp hỏi cùng một số – Bart

+0

Tôi đang chạy lệnh này từ dòng lệnh – Pol0nium

Trả lời

18

thêm một

global $argc, $argv; 

sau

function main() { 

Những biến là trong phạm vi toàn cầu nhưng không phải trong phạm vi của chức năng của bạn. Từ khóa chung nhập chúng.

+1

Các biến đó là các hình cầu. Vì vậy, nó khá vô nghĩa để tuyên bố toàn cầu một lần nữa. – Bart

+3

Câu trả lời hay! +1 @Bart tại sao không thử nghiệm trước khi downvote? – hek2mgl

+1

@Bart câu trả lời này là tốt - mặc dù nó là toàn cầu - nếu bạn muốn sử dụng nó bên trong một hàm bạn nên khai báo nó như vậy. – alfasin

3

có thể bạn muốn làm

$argc = $_SERVER['argc']; 
$argv = $_SERVER['argv']; 
3

tôi đã cùng một vấn đề.

Bạn có thể chạy lệnh sau.

$ php -i | grep argv #run this comand 

Will đầu ra này:

<tr><td class="e">register_argc_argv</td><td class="v"> Off</td><td class="v"> Off</td></tr> 

điều này có nghĩa php của bạn không đăng ký argv và argc

nếu tắt bạn có thể đi với bạn php.ini và thiết lập nó như register_argc_argv = On.

Điều này giải quyết được sự cố của tôi.