วิธีรันโค้ด PHP จากบรรทัดคำสั่ง?


163

ฉันต้องการรันคำสั่ง php เดียวเช่นif(function_exists("my_func")) echo 'function exists';โดยตรงกับบรรทัดคำสั่งโดยไม่ต้องใช้ไฟล์ php แยกกัน

มันเป็นไปได้ยังไงกัน ?


1
การทำ function_exists () โดยไม่ใช้ไฟล์อื่น ๆ ที่มีฟังก์ชั่นที่ผู้ใช้กำหนดจะไม่ดีมากยกเว้นการทดสอบเวอร์ชัน PHP ซึ่งคุณสามารถค้นหาได้ด้วยวิธีอื่น คุณต้องการทดสอบฟังก์ชันใด
Matt Gibson

ฉันกำลังมองหาการทดสอบฟังก์ชั่นนี้: sg_load ()
Steve

2
ดูเหมือนสิ่งที่คุณต้องการจริงๆคือการดูว่าส่วนขยาย php sourceguardian เปิดใช้งานอยู่หรือไม่
Matt Gibson

2
phpinfo () ควรบอกคุณ
jpic

คำตอบ:


256

หากคุณกำลังจะทำ PHP ในบรรทัดคำสั่งฉันขอแนะนำให้คุณติดตั้งphpsh เปลือก มันสนุกมากขึ้น

อย่างไรก็ตามคำสั่ง php เสนอสองสวิตช์เพื่อเรียกใช้โค้ดจากบรรทัดคำสั่ง :

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

คุณสามารถใช้สวิตช์ -rของ php ดังนี้:

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

คำสั่ง PHP ข้างต้นควรส่งออก noและส่งคืน 0ตามที่คุณเห็น:

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

สวิตช์ที่ตลกอีกอันหนึ่งคือphp -a :

-a               Run as interactive shell

มันเรียงลำดับของง่อยเมื่อเทียบกับphpshแต่ถ้าคุณไม่ต้องการที่จะติดตั้งเปลือกโต้ตอบที่น่ากลัวสำหรับ PHP ทำโดย Facebook จะได้รับแท็บเสร็จประวัติศาสตร์และอื่น ๆแล้วใช้ -a เช่น :

>>> php -a
Interactive shell

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

ถ้ามันไม่ได้ทำงานในกล่องของคุณเช่นเดียวกับกล่องของฉัน * ES * ( ทดสอบบน Ubuntu และประตูชัย) แล้วอาจจะตั้งค่าของ PHP เลือนหรือหัก หากคุณรันคำสั่งนี้:

php -i | grep 'API'

คุณควรเห็น:

Server API => Command Line Interface

หากคุณไม่ได้หมายถึงว่าบางทีคำสั่งอื่นจะให้ SAPI ลอง php-cli อาจเป็นแพ็คเกจหรือคำสั่งที่มีอยู่ในระบบปฏิบัติการของคุณ

หากคุณเห็นว่าคำสั่ง php ของคุณใช้ CLI (อินเตอร์เฟสบรรทัดคำสั่ง) SAPI (เซิร์ฟเวอร์ API) จากนั้นเรียกใช้php -h | grep codeเพื่อค้นหาสวิตช์บ้าที่ซึ่งไม่ได้เปลี่ยนเป็นปี -อนุญาตให้เรียกใช้รหัสในเวอร์ชัน / การตั้งค่าของคุณ

อีกสองตัวอย่างเพื่อให้แน่ใจว่ามันทำงานบนกล่องของฉัน:

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

นอกจากนี้โปรดทราบว่าอาจเป็นไปได้ว่ามีการโหลดส่วนขยายใน CLI และไม่ได้อยู่ใน CGI หรือ Apache SAPI เป็นไปได้ว่า PHP SAPIs หลายแห่งใช้ไฟล์ php.ini ที่แตกต่างกันเช่น/etc/php/cli/php.inivs /etc/php/cgi/php.inivs /etc/php/apache/php.iniในกล่อง Gentoo หาที่ไฟล์ INI php -i | grep iniจะใช้กับ


บางทีการตั้งค่า php ของคุณอาจจะเสีย ฉันอัปเดตคำตอบของฉันรวมถึงคำแนะนำเพื่อหาคำตอบ
jpic

เพิ่มหมายเหตุเกี่ยวกับ php -a ซึ่งอาจเป็นประโยชน์กับคุณ
jpic

6
โปรดทราบว่า phpsh ไม่มีการบำรุงรักษาโดยผู้เขียน (Facebook) และคนที่อยู่ในหน้า Google Groups กล่าวว่าในปี 2012 ว่า "phpsh ไม่สนับสนุนจริงๆหรือประโยชน์ใด ๆ เพิ่มเติม" คุณอาจค้นหาBoris REPLสำหรับ php console ที่ได้รับการปรับปรุง
Ben Creasy

3

บนบรรทัดคำสั่ง:

php -i | grep sourceguardian

ถ้ามีคุณก็จะได้รับข้อความ ถ้าไม่คุณจะไม่ได้อะไรเลย


4
ฉันตาบอดหรือคำตอบนี้ไม่มีส่วนเกี่ยวข้องกับคำถาม คำตอบนี้ควรตอบคำถามที่ถามว่า " จะรันโค้ด PHP โดยตรงจากบรรทัดคำสั่งได้อย่างไรโดยไม่ต้องบันทึกโค้ด PHP ลงใน.phpไฟล์ "?
trejder

15
@trejder สักครู่ที่นั่นฉันสงสัยว่าฉันจะตอบคำถามที่ผิด แต่จากนั้นฉันก็ดูที่ประวัติการแก้ไขและความคิดเห็น นี่เป็นการตอบสนองสิ่งที่ OP ต้องการให้เกิดขึ้นจริง: ค้นหาว่ามีการโหลดส่วนขยาย PHP เฉพาะหรือไม่ คำถามได้ถูกนำมาใช้ใหม่ตั้งแต่ตอนนี้ดังนั้นจึงไม่เหมาะสมในตอนนี้
Matt Gibson

3

คุณสามารถใช้ได้ :

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

แท็กสั้น " <? = " ก็มีประโยชน์เช่นกัน:

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

แท็กปิด Tha "?>" เป็นตัวเลือก แต่อย่าลืมขั้นสุดท้าย ";" !


2
ดูเหมือนว่าจะมีปัญหามากกว่าคำตอบที่ยอมรับได้ 7 ปี การใช้งานphp -rคุณไม่ต้องกังวลกับการเปิดแท็ก PHP
miken32

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.