Bagaimana cara mengeksekusi kode PHP dari baris perintah?

163

Saya ingin mengeksekusi pernyataan php tunggal seperti if(function_exists("my_func")) echo 'function exists';langsung dengan baris perintah tanpa harus menggunakan file php terpisah.

Bagaimana itu mungkin ?

Steve
sumber
1
melakukan function_exists () tanpa menggunakan file lain yang mengandung fungsi yang ditentukan pengguna tidak akan banyak baik, kecuali untuk menguji versi PHP, yang dapat Anda temukan dengan cara lain. Fungsi apa yang ingin Anda uji?
Matt Gibson
Saya mencari pengujian fungsi ini: sg_load ()
Steve
2
Kedengarannya seperti apa yang sebenarnya Anda inginkan adalah mencari tahu apakah ekstensi php sourceguardian diaktifkan?
Matt Gibson
2
maka phpinfo () harus memberi tahu Anda.
jpic

Jawaban:

256

Jika Anda akan melakukan PHP di baris perintah, saya sarankan Anda menginstal phpsh, shell PHP yang layak . Jauh lebih menyenangkan.

Lagi pula, perintah php menawarkan dua switch untuk mengeksekusi kode dari baris perintah :

-r <code>        Run PHP <code> without using script tags <?..?>
-R <code>        Run PHP <code> for every input line

Anda dapat menggunakan sakelar -r php seperti itu:

php -r 'echo function_exists("foo") ? "yes" : "no";'

Perintah PHP di atas harus menampilkan no dan mengembalikan 0 seperti yang Anda lihat:

>>> php -r 'echo function_exists("foo") ? "yes" : "no";'
no
>>> echo $? # print the return value of the previous command
0

Switch lucu lainnya adalah php -a :

-a               Run as interactive shell

Ini agak lumpuh dibandingkan dengan phpsh , tetapi jika Anda tidak ingin menginstal shell interaktif mengagumkan untuk php yang dibuat oleh facebook untuk mendapatkan penyelesaian tab, riwayat, dan sebagainya , maka gunakan -a seperti itu :

>>> php -a
Interactive shell

php > echo function_exists("foo") ? "yes" : "no";
no
php > 

Jika tidak berfungsi pada kotak Anda seperti pada kotak saya * es * ( diuji pada Ubuntu dan Arch), maka mungkin pengaturan PHP Anda tidak jelas atau rusak . Jika Anda menjalankan perintah ini:

php -i | grep 'API'

Anda harus melihat:

Server API => Command Line Interface

Jika tidak , ini berarti bahwa mungkin perintah lain akan menyediakan CLI SAPI . Coba php-cli, mungkin itu paket atau perintah yang tersedia di OS Anda.

Jika Anda melihat bahwa perintah php Anda menggunakan CLI (Command Line Interface) SAPI (Server API), maka jalankan php -h | grep codeuntuk mencari tahu saklar gila mana - karena ini belum berubah untuk tahun - memungkinkan untuk menjalankan kode di versi / pengaturan Anda.

Beberapa contoh lain, hanya untuk memastikan itu berfungsi pada kotak saya:

>>> php -r 'echo function_exists("sg_load") ? "yes" : "no";' 
no
>>> php -r 'echo function_exists("print_r") ? "yes" : "no";' 
yes

Juga, perhatikan bahwa ada kemungkinan bahwa ekstensi dimuat di CLI dan bukan di SAPI CGI atau Apache. Kemungkinan beberapa SAPI PHP menggunakan file php.ini yang berbeda , misalnya /etc/php/cli/php.inivs /etc/php/cgi/php.inivs /etc/php/apache/php.inipada kotak Gentoo. Cari tahu di mana file ini digunakan php -i | grep ini.

jpic
sumber
Mungkin pengaturan php Anda rusak. Saya memperbarui jawaban saya termasuk petunjuk untuk mengetahuinya.
jpic
Menambahkan catatan tentang php -a yang mungkin berguna bagi Anda.
jpic
6
Perhatikan bahwa phpsh tidak lagi dikelola oleh penulisnya (Facebook) dan seseorang di halaman Grup Google mengatakan pada 2012 bahwa "phpsh tidak benar-benar didukung atau berguna lagi" . Anda mungkin melihat Boris REPL untuk konsol php yang ditingkatkan.
Ben Creasy
3

Di baris perintah:

php -i | grep sourceguardian

Jika ada di sana, maka Anda akan mendapatkan beberapa teks. Jika tidak, Anda tidak akan mendapatkan apa pun.

Matt Gibson
sumber
4
Entah saya buta atau jawaban ini tidak ada hubungannya dengan pertanyaan. Bagaimana jawaban ini seharusnya menjawab pertanyaan yang menanyakan " Bagaimana menjalankan kode PHP langsung dari baris perintah, tanpa menyimpan kode PHP ke dalam .phpfile? "?
trejder
15
@trejder Sejenak di sana saya bertanya-tanya apakah saya telah menjawab pertanyaan yang salah, tetapi kemudian saya melihat riwayat sunting dan komentar. Ini menjawab apa yang tampaknya dibutuhkan OP: mencari tahu apakah ekstensi PHP tertentu dimuat. Sejak itu pertanyaannya telah diulangi, jadi tidak cocok sekarang.
Matt Gibson
3

Kamu bisa memakai :

 echo '<?php if(function_exists("my_func")) echo "function exists"; ' | php

Tag pendek " <? = " Juga dapat bermanfaat:

 echo '<?= function_exists("foo") ? "yes" : "no";' | php
 echo '<?= 8+7+9 ;' | php

Tag penutup "?>" Adalah opsional, tetapi jangan lupa final ";" !

fred727
sumber
2
Ini tampaknya lebih merepotkan daripada jawaban yang diterima 7 tahun. Menggunakan php -rAnda tidak perlu khawatir tentang membuka tag PHP.
miken32
1

Menggunakan PHP dari baris perintah

gunakan " bukannya ' pada windows saat menggunakan versi cli dengan -r

php -r "echo 1"

-- benar

php -r 'echo 1'

- salah

  PHP Parse error:  syntax error, unexpected ''echo' (T_ENCAPSED_AND_WHITESPACE), expecting end of file in Command line code on line 1
pengguna1942505
sumber