จะเปิดใช้งานแท็กสั้น PHP ได้อย่างไร


324

ฉันมีเว็บแอพพลิเคชั่นบนเซิร์ฟเวอร์ Linux ที่ขึ้นต้นด้วย <?

ฉันต้องการคัดลอกแอปพลิเคชันนี้ไปยังสภาพแวดล้อมของ windows และทุกอย่างทำงานได้ดียกเว้นว่าคำสั่ง SQL จะถูกแสดงผลที่แตกต่างกัน ฉันไม่รู้ว่าสิ่งนี้เกี่ยวข้องกับสคริปต์ที่ขึ้นต้นด้วย<?phpแทนที่จะเป็น<?เพราะฉันไม่รู้ว่าจะเปิดใช้งาน<?จากที่ใดPHP.iniดังนั้นฉันจึงเปลี่ยนเป็น<?php

ฉันรู้ว่าข้อความทั้งสองนี้ควรจะมีความหมายเหมือนกัน แต่ฉันต้องทดสอบด้วย<?เพื่อให้แน่ใจว่าแอปพลิเคชันจะเหมือนกันทุกประการ ด้วยวิธีนี้ฉันสามารถกำจัดความเป็นไปได้อื่น

ขอบคุณ



อย่างไรก็ตามเรื่องนี้ยังคงพัฒนาอยู่ คอยติดตาม. :)
อธิการ

คำตอบ:


559

ชุด

short_open_tag=On

ในphp.ini

และรีสตาร์ทเซิร์ฟเวอร์ Apache ของคุณ


54
ถ้า PHP ทำงานเป็นโมดูล Apache คุณยังสามารถตั้งค่าไว้ใน htaccess ไฟล์: php_flag short_open_tag บน
ÁlvaroGonzález

12
ทรงตัวมากที่สุดใน/etc/php5/apache2/php.ini
Benjamin Crouzier

@pinouchon, seedeg เขียนว่าเขาย้ายไปที่ Windows แต่ความคิดเห็นของคุณช่วยฉัน :)
Line

7
ใช้php --iniเพื่อค้นหาไฟล์คอนฟิกูเรชันที่โหลด (ไฟล์การกำหนดค่าโหลด: /etc/php5/cli/php.ini)
Wietse

หากคุณใช้ xampp ใน windows กรุณาเปิดแผงควบคุม XAMPP คลิกที่ปุ่ม CONFIG และไปที่ตัวเลือก PHP (php.ini)
Rajput Praful

80

สิ่งนี้สามารถทำได้โดยการเปิดใช้งานshort_open_tagในphp.ini :

short_open_tag = on

หากคุณไม่มีสิทธิ์เข้าถึง php.ini คุณสามารถลองเปิดใช้งานไฟล์. htaccess ได้แต่อาจเป็นไปได้ที่ บริษัท โฮสติ้งจะปิดการใช้งานหากคุณใช้โฮสติ้งที่ใช้ร่วมกัน:

php_value short_open_tag 1

สำหรับคนที่คิดว่า short_open_tags เป็นการปฏิบัติที่ไม่ดีตั้งแต่ php 5.4 <?= ... ?>แท็กจะรองรับทุกที่โดยไม่คำนึงถึงการตั้งค่าดังนั้นจึงไม่มีเหตุผลที่จะไม่ใช้มันหากคุณสามารถควบคุมการตั้งค่าบนเซิร์ฟเวอร์ ยังกล่าวในลิงค์นี้: short_open_tag


5
แท็กเปิดสั้น ๆ ไม่จำเป็นต้องเป็นการปฏิบัติที่เลวร้าย (ฉันพยายามเก็บใจไว้ที่นี่) แต่เพียงเพราะราสมุสและคณะ ตัดสินใจที่จะให้การสนับสนุนเริ่มต้นสำหรับพวกเขาใน PHP5.4 ไม่ได้ให้เหตุผลสำหรับการใช้พวกเขา การใช้มันอาจสร้างการพึ่งพาซึ่งไม่พึงประสงค์ในภายหลังหรือก่อให้เกิดความสับสนกับ XML มีการสนทนาที่ดีที่นี่: stackoverflow.com/questions/200640/…
Ian Lewis

1
เอียน เราไม่ได้พูดถึง<? echo $var ?>แท็กเปิดสั้น แต่เป็น<?= $var ?>แท็กเปิดสั้น Afaik XML ไม่ควรได้รับผลกระทบ
RJD22

เรามีการทดสอบการเขียนโค้ด PHP และได้รับการส่งเป็นครั้งคราวซึ่งมีการใช้แท็ก <? = สั้น ๆ น่าเสียดายที่สมมติฐานว่าสไตล์นี้มีการใช้งานทุกหนทุกแห่งเล็กน้อยไร้เดียงสาและบ่อยครั้งมาจากนักพัฒนาที่นำ ASP มาใช้ เห็นได้ชัดว่ามันมีอยู่ แต่การใช้งานคือการเพิ่มประสิทธิภาพขนาดเล็กและจะล้มเหลวในบริเวณพกพาซึ่งเป็นความอัปยศ
เอียนเลวิส

6
@IanLewis ฉันไม่เห็นด้วย แท็กสั้น PHP ไม่มีส่วนเกี่ยวข้องกับ ASP เหตุผลที่ดีที่สุดที่คุณต้องการใช้<?= คือการสร้างเทมเพลตและฉันคิดว่ามันใช้งานได้จริง ภาษา templating อื่น ๆ {{var}}เช่นหนวดยังใช้แท็กสั้น PHP มักถูกใช้เป็นภาษาเทมเพลตและสิ่งที่ต้องทำ<?php echo $var ?>นั้นน่าเกลียดกว่า<?=$var?>ใน HTML แบบอินไลน์
RJD22

มันเป็นการถกเถียงที่น่าสนใจและกลายเป็นเรื่องส่วนตัวฉันไม่เชื่อว่าโค้ดที่สวยงามนั้นดีกว่าโค้ดที่แสดงถึงความน่าเกลียดเล็กน้อย มุมมองของฉันเองที่นี่คือเวอร์ชัน <? = $ var?> ดูแออัดมากขึ้นและอ่านได้น้อยกว่าเปิดมากขึ้น แต่ยาวกว่าเวอร์ชัน การเชื่อมโยงกับ ASP จะต้องเป็นการรับรู้ร่วมกันดังนั้นนักพัฒนาหลายคนที่ฉันรู้ว่าทุกคนทำลิงก์เดียวกันโดยไม่ต้องแจ้ง
เอียนเลวิส

19

สิ่งนี้สามารถทำได้โดยการเปิดใช้งาน short_open_tag ใน php.ini:

1. ในการค้นหาไฟล์ php.ini ให้ดำเนินการในบรรทัดความคิดเห็น

 php --ini

คุณจะได้รับสิ่งนี้

Configuration File (php.ini) Path: /etc
Loaded Configuration File:         /etc/php.ini
Scan for additional .ini files in: /etc/php.d
Additional .ini files parsed:      /etc/php.d/curl.ini,
/etc/php.d/fileinfo.ini,
/etc/php.d/gd.ini,
/etc/php.d/json.ini,
/etc/php.d/mcrypt.ini,
/etc/php.d/mysql.ini,
/etc/php.d/mysqli.ini,
/etc/php.d/pdo.ini,
/etc/php.d/pdo_mysql.ini,
/etc/php.d/pdo_sqlite.ini,
/etc/php.d/phar.ini,
/etc/php.d/sqlite3.ini,
/etc/php.d/zip.ini

ดูบรรทัดที่ 2 จากการแสดงความคิดเห็นไฟล์จะอยู่ในเส้นทางที่กล่าวถึง

2.Open ไฟล์ php.ini short_open_tagและหา โดยค่าเริ่มต้นมันอยู่ในการเปลี่ยนแปลงมันoffon

3. รีสตาร์ทเซิร์ฟเวอร์ดำเนินการความคิดเห็นนี้

service httpd restart

ขอบคุณ



12

ฉันเห็นคำตอบทั้งหมดข้างต้นถูกต้องเพียงบางส่วนเท่านั้น ในความเป็นจริงแอป PHP ศตวรรษที่ 21 ทั้งหมดจะมี FastCGI Process Manager (php-fpm) ดังนั้นเมื่อคุณเพิ่ม php-info () ลงในสคริปต์ test.php ของคุณแล้วตรวจสอบเส้นทางที่ถูกต้องสำหรับ php.ini

Go to php.ini and set short_open_tag = On

สำคัญ: จากนั้นคุณต้องเริ่มกระบวนการ php-fpm ใหม่เพื่อให้สามารถทำงานได้!

sudo service php-fpm restart

จากนั้นรีสตาร์ทเซิร์ฟเวอร์ nginx / http ของคุณในที่สุด

sudo service nginx restart

2
ในกรณีของฉัน: บริการ sudo php7.0-fpm เริ่มใหม่
Sampath Perera

sudo service php-fpm การรีสตาร์ทจะทำงานสำหรับ PHP เวอร์ชันเริ่มต้นใด ๆ ที่คุณติดตั้งไว้ในกล่องของคุณเว้นแต่ว่าคุณมีหลายรุ่นซึ่งในกรณีนี้คุณต้องระบุรุ่นที่คุณอ้างถึง
Eddy Ferreira

1
การรีสตาร์ท nginx ไม่ได้ทำเพื่อฉัน อันที่จริงแล้วฟังก์ชั่น phpini () ยังคงแสดง short_open_tag ว่าเป็น Off ฉันเพิ่งรีบูตเซิร์ฟเวอร์และใช้งานได้
ค่อนข้าง


10

ง่ายเหมือนที่ทำตามขั้นตอนต่อไปนี้:

  1. ไปที่php.iniไฟล์
  2. ค้นหาshort_open_tagและตั้งค่าเป็นon

    short_open_tag = On
  3. รีสตาร์ทเซิร์ฟเวอร์


9

ใน CentOS 6 (ทดสอบกับ Centos 7 ด้วย) คุณไม่สามารถตั้ง short_open_tag ใน /etc/php.ini สำหรับ php-fpm คุณจะมีข้อผิดพลาด:

ERROR: [/etc/php.ini:159] unknown entry 'short_open_tag'
ERROR: Unable to include /etc/php.ini from /etc/php-fpm.conf at line 159
ERROR: failed to load configuration file '/etc/php-fpm.conf'
ERROR: FPM initialization failed

คุณต้องแก้ไขการกำหนดค่าสำหรับเว็บไซต์ของคุณซึ่งสามารถพบได้ใน /etc/php-fpm.d/www.conf และเขียนที่ท้ายไฟล์:

php_value[short_open_tag] =  On

ต้องทำสิ่งนี้กับ Debian Jessie สิ่งนี้อาจใช้กับการติดตั้ง PHP5-FPM จริงทั้งหมด
Bertrand

7

หากคุณกำลังใช้UbuntuกับApache+php5อยู่แล้วในรุ่นปัจจุบันมี 2 สถานที่ที่คุณต้องการเปลี่ยนเป็นshort_open_tag = On

  1. /etc/php5/apache2/php.ini - สิ่งนี้มีไว้สำหรับเพจที่โหลดผ่านเว็บเซิร์ฟเวอร์ของคุณ (Apache)
  2. /etc/php5/cli/php.ini- การกำหนดค่านี้จะใช้เมื่อคุณเรียกใช้ไฟล์ php จากบรรทัดคำสั่งเช่น: php yourscript.php- สำหรับไฟล์ php ที่ทำงานด้วยตนเองหรือ cronjob ที่ดำเนินการโดยตรงบนเซิร์ฟเวอร์

6

หากคุณแก้ไขไฟล์ php.ini ของคุณอย่าลืมรีสตาร์ทบริการของคุณ (apache2 ฯลฯ ) เพื่อให้การแก้ไขเป็น php.ini มีผล


5

สำหรับผู้ใช้ Wamp Server มีวิธีที่ง่ายกว่า: คุณสามารถเปิดใช้งานการตั้งค่าง่ายๆ (ซ้าย) คลิกหนึ่งครั้งที่ไอคอน WampServer เลือก PHP -> การตั้งค่า PHP -> แท็กเปิดสั้น รอสักครู่ WampServer จะรีสตาร์ท PHP โดยอัตโนมัติและใช้บริการบนเว็บ

มีพื้นเพมาจาก: http://osticket.com/forums/showthread.php?t=3149


5
; Default Value: On
; Development Value: Off
; Production Value: Off
; http://php.net/short-open-tag
;short_open_tag=Off   <--Comment this out
; XAMPP for Linux is currently old fashioned
short_open_tag = On   <--Uncomment this

1

หากใช้ xampp คุณจะสังเกตเห็นว่าไฟล์ php.ini มีการกล่าวถึง short_open_tag สองครั้ง เปิดใช้งานตัวที่สองเพื่อ short_open_tag = เปิด คนแรกมีการแสดงความคิดเห็นออกและคุณอาจถูกล่อลวงให้ยกเลิกการใส่เครื่องหมายข้อคิดเห็นและแก้ไข แต่ถูกลบล้างโดย short_open_tag ที่สอง


1

หากคุณใช้ xampp ใน windows โปรดทำตาม

  1. เปิดแผงควบคุม XAMPP
  2. คลิกที่ปุ่มกำหนดค่า
  3. ไปที่ตัวเลือก PHP (php.ini)

ค้นหา short_open_tag โดยใช้ยูทิลิตี้ ctrl + f

คุณจะพบ ;short_open_tag

กรุณาลบเครื่องหมายอัฒภาค(;)ออกจากบรรทัด

และเก็บไว้เป็น short_open_tag = on

ในที่สุดรีสตาร์ทเซิร์ฟเวอร์ Apache ของคุณ


0

หากต้องการเปิดใช้งาน short_open_tag สำหรับโดเมนที่มี php-fpm คุณต้องแก้ไข:

/etc/php5/fpm/pool.d/xxxxxxxxxx.conf

โดยที่ xxxxx คือหมายเลขซ็อกเก็ตของโดเมน

และเพิ่ม: php_value [short_open_tag] = เปิด


0
sed -i "s/short_open_tag = .*/short_open_tag = On/" /etc/php/7.2/apache2/php.ini

ใช้งานได้กับ php7.2 บน ubuntu 16 ซึ่งเป็นคำตอบเดียวกับ Bradley Flood แม้ว่าจะมีการเปลี่ยนแปลงไดเรกทอรีที่เก็บไฟล์ปรับแต่ง

นอกจากนี้คุณสามารถเปลี่ยนรุ่นในสตริง php เพื่อให้ตรงกับรุ่นที่ติดตั้งในปัจจุบันของคุณ



-2

ฉันเปลี่ยน short_open_tag Off เป็น On บนอินสแตนซ์ aws centos 7 ของฉันและ php7 (PHP 7.0.33 (cli) (สร้าง: 6 ธันวาคม 2018 22:30:44) (NTS) แต่มันไม่ได้สะท้อนหน้าข้อมูล php และรหัส ดังนั้นฉันอาจอ้างอิงเอกสารและค้นหาวิธีแก้ไขในกรณีของฉัน เพิ่มบรรทัดพิเศษหลังจาก short_open_tag เป็นasp_tags = เปิดหลังจากนั้นให้รีสตาร์ท Apache มันทำงานบนรหัสและฉันไปเอาท์พุทอย่างถูกต้อง

ไฟล์ php.ini

engine = On

; This directive determines whether or not PHP will recognize code between
; <? and ?> tags as PHP source which should be processed as such. It is
; generally recommended that <?php and ?> should be used and that this feature
; should be disabled, as enabling it may result in issues when generating XML
; documents, however this remains supported for backward compatibility reasons.
; Note that this directive does not control the <?= shorthand tag, which can be
; used regardless of this directive. 
; Default Value: On   
; Development Value: Off     
; Production Value: Off  
; http://php.net/short-open-tag

short_open_tag = On

; Allow ASP-style <% %> tags   
; http://php.net/asp-tags
asp_tags = On

-5

การตั้งค่าasp_tags = Onและshort_open_tag = Onในไฟล์ทั้งสอง\apache\Apache2.2.21\bin\php.iniและ\bin\php\php5.3.8\php.ini แล้วรีสตาร์ทเซิร์ฟเวอร์อาปาเช่


6
asp_tags? เพื่ออะไร?
สามัญสำนึกของคุณ

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