Php thực thi được ở đâu trong linux?

Cả hai cách (dù có sử dụng công tắc -f hay không) đều thực thi tệp my_script. php. Lưu ý rằng không có hạn chế nào về tệp nào có thể được thực thi;

  • Truyền mã PHP để thực thi trực tiếp trên dòng lệnh

    $ php -r 'print_r(get_defined_constants());'
    

    Phải đặc biệt quan tâm đến việc thay thế biến shell và sử dụng dấu ngoặc kép

    Ghi chú

    Đọc kỹ ví dụ. không có thẻ bắt đầu hoặc thẻ kết thúc. Công tắc -r đơn giản là không cần chúng và việc sử dụng chúng sẽ dẫn đến lỗi phân tích cú pháp

  • Cung cấp mã PHP để thực thi thông qua đầu vào tiêu chuẩn (

    $ php -r 'print_r(get_defined_constants());'
    
    0)

    Điều này mang lại khả năng mạnh mẽ để tạo mã PHP một cách linh hoạt và đưa nó vào tệp nhị phân, như được hiển thị trong ví dụ (hư cấu) này

    $ some_application | some_filter | php | sort -u > final_output.txt
    

  • Bạn không thể kết hợp bất kỳ cách nào trong ba cách để thực thi mã

    Như với mọi ứng dụng shell, mã nhị phân PHP chấp nhận một số đối số; . Số lượng đối số có thể được chuyển đến tập lệnh của bạn không bị giới hạn bởi PHP (và mặc dù trình bao có giới hạn về số lượng ký tự có thể được chuyển, nhưng điều này nói chung không có khả năng bị tấn công). Các đối số được chuyển đến tập lệnh có sẵn trong mảng toàn cục $argv. Chỉ mục đầu tiên (không) luôn chứa tên của tập lệnh được gọi từ dòng lệnh. Lưu ý rằng, nếu mã được thực thi nội tuyến bằng cách sử dụng công tắc dòng lệnh -r, thì giá trị của $argv[0] sẽ là

    $ php -r 'print_r(get_defined_constants());'
    
    1; . 2. 0, thay vào đó là dấu gạch ngang (
    $ php -r 'print_r(get_defined_constants());'
    
    2). Điều này cũng đúng nếu mã được thực thi thông qua một đường dẫn từ
    $ php -r 'print_r(get_defined_constants());'
    
    0

    Biến toàn cục thứ hai, $argc, chứa số phần tử trong mảng $argv (không phải số đối số được truyền cho tập lệnh)

    Miễn là các đối số được chuyển đến tập lệnh không bắt đầu bằng ký tự

    $ php -r 'print_r(get_defined_constants());'
    
    1, thì không có gì đặc biệt cần chú ý. Truyền một đối số cho tập lệnh bắt đầu bằng
    $ php -r 'print_r(get_defined_constants());'
    
    1 sẽ gây rắc rối vì trình thông dịch PHP cho rằng nó phải tự xử lý nó, ngay cả trước khi thực thi tập lệnh. Để ngăn chặn điều này, hãy sử dụng dấu tách danh sách đối số
    $ php -r 'print_r(get_defined_constants());'
    
    3. Sau khi dấu tách này đã được phân tích cú pháp bằng PHP, mọi đối số sau đây sẽ được chuyển nguyên vẹn vào tập lệnh

    # This will not execute the given code but will show the PHP usage
    $ php -r 'var_dump($argv);' -h
    Usage: php [options] [-f]  [args...]
    [...]
    
    # This will pass the '-h' argument to the script and prevent PHP from showing its usage
    $ php -r 'var_dump($argv);' -- -h
    array(2) {
      [0]=>
      string(1) "-"
      [1]=>
      string(2) "-h"
    }
    

    Tuy nhiên, trên các hệ thống Unix, có một cách khác để sử dụng PHP cho shell scripting. làm cho dòng đầu tiên của tập lệnh bắt đầu bằng

    $ php -r 'print_r(get_defined_constants());'
    
    4 (hoặc bất kỳ đường dẫn nào đến tệp nhị phân PHP CLI của bạn nếu khác). Phần còn lại của tệp phải chứa mã PHP bình thường trong các thẻ bắt đầu và kết thúc PHP thông thường. Khi các thuộc tính thực thi của tệp được đặt phù hợp (e. g. chmod +x test), tập lệnh có thể được thực thi giống như bất kỳ tập lệnh shell hoặc perl nào khác

    Ví dụ #1 Thực thi tập lệnh PHP dưới dạng tập lệnh shell

    $ php -r 'print_r(get_defined_constants());'
    
    5

    Giả sử tệp này có tên là test trong thư mục hiện tại, bây giờ có thể thực hiện như sau

    $ chmod +x test
    $ ./test -h -- foo
    array(4) {
      [0]=>
      string(6) "./test"
      [1]=>
      string(2) "-h"
      [2]=>
      string(2) "--"
      [3]=>
      string(3) "foo"
    }
    

    Như có thể thấy, trong trường hợp này không cần quan tâm đặc biệt khi truyền các tham số bắt đầu bằng

    $ php -r 'print_r(get_defined_constants());'
    
    1

    Tệp thực thi PHP có thể được sử dụng để chạy các tập lệnh PHP hoàn toàn độc lập với máy chủ web. Trên các hệ thống Unix, dòng đầu tiên

    $ php -r 'print_r(get_defined_constants());'
    
    7 (hoặc "shebang") đặc biệt phải được thêm vào tập lệnh PHP để hệ thống có thể tự động cho biết chương trình nào sẽ chạy tập lệnh. Trên nền tảng Windows, có thể liên kết php. exe bằng tùy chọn nhấp đúp của tiện ích mở rộng
    $ some_application | some_filter | php | sort -u > final_output.txt
    
    9 hoặc có thể tạo tệp bó để chạy tập lệnh thông qua PHP. Dòng đầu tiên Shebang đặc biệt dành cho Unix không gây hại trên Windows (vì nó được định dạng dưới dạng nhận xét PHP), vì vậy có thể viết các chương trình đa nền tảng bằng cách đưa nó vào. Một ví dụ đơn giản về viết chương trình PHP dòng lệnh được hiển thị bên dưới

    Ví dụ #2 Tập lệnh dự định chạy từ dòng lệnh (tập lệnh. php)

    $ php -r 'print_r(get_defined_constants());'
    
    9

    $ some_application | some_filter | php | sort -u > final_output.txt
    
    0

    $ some_application | some_filter | php | sort -u > final_output.txt
    
    1

    $ some_application | some_filter | php | sort -u > final_output.txt
    
    2

    $ some_application | some_filter | php | sort -u > final_output.txt
    
    3

    $ some_application | some_filter | php | sort -u > final_output.txt
    
    4

    Tập lệnh ở trên bao gồm dòng đầu tiên của Unix shebang để chỉ ra rằng tệp này sẽ được chạy bởi PHP. Chúng tôi đang làm việc với phiên bản CLI tại đây, vì vậy sẽ không có tiêu đề HTTP nào được xuất ra

    Trước tiên, chương trình kiểm tra xem có một đối số được yêu cầu không (ngoài tên tập lệnh, cũng được tính). Nếu không, hoặc nếu đối số là --help, -help, -h hoặc -?, thông báo trợ giúp sẽ được in ra, sử dụng $argv[0] để tự động in tên tập lệnh như đã nhập trên dòng lệnh. Mặt khác, đối số được lặp lại chính xác như đã nhận

    Để chạy tập lệnh trên trên Unix, tập lệnh phải được thực thi và được gọi đơn giản là tập lệnh. php echothis hoặc script. php -h. Trên Windows, một tệp bó tương tự như sau có thể được tạo cho tác vụ này

    Ví dụ #3 Batch file để chạy một dòng lệnh PHP script (script. con dơi)

    $ some_application | some_filter | php | sort -u > final_output.txt
    
    8

    Giả sử chương trình trên có tên là script. php và CLI php. exe nằm trong C. \php\php. exe, tệp thực thi này sẽ chạy nó, chuyển qua tất cả các tùy chọn được nối thêm. script. bat echothis hoặc script. bồn tắm

    Xem thêm tài liệu mở rộng Readline để biết thêm các chức năng có thể được sử dụng để nâng cao các ứng dụng dòng lệnh trong PHP

    Trên Windows, PHP có thể được cấu hình để chạy mà không cần cung cấp C. \php\php. exe hoặc phần mở rộng

    $ some_application | some_filter | php | sort -u > final_output.txt
    
    9, như được mô tả trong Dòng lệnh PHP trên Microsoft Windows

    Ghi chú

    Trên Windows, nên chạy PHP dưới tài khoản người dùng thực. Khi chạy trong một dịch vụ mạng, một số thao tác nhất định sẽ không thành công, vì "Không có ánh xạ nào giữa tên tài khoản và ID bảo mật được thực hiện"

    PHP EXE nằm ở đâu?

    Vị trí mặc định là tại C. \xampp . Từ bên trong thư mục XAMPP, hãy mở thư mục PHP và tìm tệp php. tập tin exe. Nếu bạn có thể tìm thấy php. exe trong thư mục này, thì thư mục này sẽ là thư mục cài đặt php của bạn.

    Đường dẫn PHP Ubuntu của tôi ở đâu?

    Đường dẫn PHP Ubuntu của tôi ở đâu? .
    Mở Terminal và chạy lệnh
    đâu là php
    Đầu ra sẽ giống như "/opt/lampp/bin/php"
    Đây là vị trí php của bạn

    PHP EXE ở đâu trong XAMPP?

    Nếu đã cài đặt XAMPP, bạn có thể sử dụng chương trình /opt/lampp/bin/php trên Linux, /Applications/xampp/xamppfiles/bin/php trên Mac OS X và C:\Program Files\xampp\php\php.exe on Windows .