Làm thế nào để kích hoạt các thẻ ngắn PHP?


324

Tôi có một ứng dụng web trên máy chủ Linux bắt đầu bằng <?

Tôi cần sao chép ứng dụng này vào môi trường windows và mọi thứ đều hoạt động tốt, ngoại trừ việc một câu lệnh SQL được hiển thị khác đi. Tôi không biết điều này có liên quan đến kịch bản bắt đầu hay <?phpkhông <?vì tôi không biết nên bật <?từ đâu PHP.ininên tôi đã đổi nó thành<?php

Tôi biết rằng 2 câu lệnh này được cho là có nghĩa giống nhau nhưng tôi cần kiểm tra nó <?để đảm bảo rằng ứng dụng này hoàn toàn giống nhau. Bằng cách này tôi có thể loại bỏ một khả năng khác.

Cảm ơn



Tuy nhiên, câu chuyện vẫn đang phát triển . Giữ nguyên. :)
giám mục

Câu trả lời:


559

Bộ

short_open_tag=On

trong php.ini

Và khởi động lại máy chủ Apache của bạn.


54
Nếu PHP chạy dưới dạng mô-đun Apache, bạn cũng có thể đặt nó trong tệp .htaccess: php_flag short_open_tag trên
Álvaro González

12
Lileky nhất trong/etc/php5/apache2/php.ini
Benjamin Crouzier

@pinouchon, seedeg đã viết rằng anh ấy chuyển sang Windows, nhưng Nhận xét của bạn giúp tôi :)
Dòng

7
Sử dụng php --iniđể định vị tệp cấu hình đã tải (Tệp cấu hình đã tải: /etc/php5/cli/php.ini)
Wietse

Nếu bạn đang sử dụng xampp trong windows thì vui lòng Mở bảng điều khiển XAMPP, Nhấp vào nút CONFIG và đi đến tùy chọn PHP (php.ini).
Rajput đáng khen ngợi

80

Điều này có thể được thực hiện bằng cách bật short_open_tag trong php.ini :

short_open_tag = on

Nếu bạn không có quyền truy cập vào php.ini, bạn có thể thử bật chúng qua tệp .htaccess nhưng có thể công ty lưu trữ đã vô hiệu hóa điều này nếu bạn đang sử dụng lưu trữ chia sẻ:

php_value short_open_tag 1

Đối với những người nghĩ rằng short_open_tags là thực tiễn tồi kể từ php 5.4, <?= ... ?>shorttag sẽ được hỗ trợ ở mọi nơi , bất kể cài đặt là gì, không có lý do gì để không sử dụng chúng nếu bạn có thể kiểm soát cài đặt trên máy chủ. Cũng nói trong liên kết này: short_open_tag


5
Thẻ mở ngắn không nhất thiết là thông lệ xấu (Tôi đang cố gắng giữ một tâm trí cởi mở ở đây) mà chỉ vì Rasmus et al. quyết định cung cấp hỗ trợ mặc định cho chúng trong PHP5.4 không cung cấp lý do cho việc sử dụng chúng. Việc sử dụng chúng có thể tạo ra một sự phụ thuộc không mong muốn sau này hoặc gây nhầm lẫn với XML. Một số thảo luận tốt ở đây: stackoverflow.com/questions/200640/ Kẻ
Ian Lewis

1
Ian. Chúng tôi không nói về <? echo $var ?>thẻ mở ngắn mà là <?= $var ?>thẻ mở ngắn. Afaik XML không nên bị ảnh hưởng.
RJD22

Chúng tôi có một bài kiểm tra mã hóa PHP và đôi khi nhận được các bài nộp trong đó thẻ <? = Short đã được sử dụng. Thật không may, giả định rằng phong cách này được sử dụng ở khắp mọi nơi là một chút ngây thơ và thường đến từ các nhà phát triển đưa ra một chế độ ăn kiêng của ASP. Rõ ràng là nó có sẵn nhưng việc sử dụng nó là một tối ưu hóa vi mô và sẽ thất bại trên cơ sở tính di động, đó là một sự xấu hổ.
Ian Lewis

6
@IanLewis Tôi không đồng ý. Thẻ ngắn PHP không liên quan gì đến ASP. Lý do tốt nhất tại sao bạn muốn sử dụng <?= là để tạo khuôn mẫu và tôi nghĩ đó là một lý do khá hợp lệ. Các ngôn ngữ tạo khuôn mẫu khác như ria mép cũng sử dụng các thẻ đơn giản ngắn {{var}}. PHP thường được sử dụng như một ngôn ngữ tạo khuôn mẫu và phải làm <?php echo $var ?>là xấu hơn rất nhiều so với <?=$var?>HTML nội tuyến.
RJD22

Đó là một cuộc tranh luận thú vị và trở nên rất chủ quan, tôi không tin rằng mã đẹp nhất thiết phải tốt hơn mã cho thấy một chút xấu xí vốn có. Quan điểm của riêng tôi ở đây là phiên bản <? = $ Var?> Trông đông hơn và dễ đọc hơn nhiều so với phiên bản mở hơn, nhưng dài hơn. Liên kết với ASP phải là một nhận thức phổ biến sau đó vì một số nhà phát triển mà tôi biết tất cả đều tạo cùng một liên kết mà không cần nhắc.
Ian Lewis

19

Điều này có thể được thực hiện bằng cách bật short_open_tag trong php.ini:

1.Để xác định vị trí tệp php.ini, trên dòng nhận xét thực thi

 php --ini

bạn sẽ nhận được một số thứ như thế này,

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

Xem dòng thứ 2 từ đầu ra nhận xét. Tập tin sẽ nằm trong đường dẫn được đề cập.

2.Mở tệp php.ini và tìm short_open_tag. Theo mặc định, nó được offthay đổi thành on.

3. Khởi động lại máy chủ, thực hiện nhận xét này

service httpd restart

Cảm ơn


18

Để đặt các thẻ ngắn để mở từ tập lệnh cài đặt Vagrant trên Ubuntu:

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

12

Tôi có thể thấy tất cả các câu trả lời ở trên chỉ đúng một phần. Trong thực tế, tất cả các ứng dụng PHP của Thế kỷ 21 sẽ có Trình quản lý quy trình FastCGI (php-fpm) vì vậy khi bạn đã thêm php-information () vào tập lệnh test.php của mình và kiểm tra đường dẫn chính xác cho php.ini

Go to php.ini and set short_open_tag = On

QUAN TRỌNG: sau đó bạn phải khởi động lại quy trình php-fpm của mình để điều này có thể hoạt động!

sudo service php-fpm restart

và cuối cùng khởi động lại máy chủ nginx / http của bạn

sudo service nginx restart

2
Trong trường hợp của tôi: dịch vụ sudo php7.0-fpm khởi động lại
Sampath Perera

Dịch vụ sudo Khởi động lại php-fpm sẽ hoạt động cho mọi phiên bản PHP mặc định mà bạn đã cài đặt trên hộp của mình, trừ khi bạn có nhiều phiên bản trong trường hợp đó bạn phải chỉ định phiên bản bạn đang đề cập
Eddy Ferreira

1
Khởi động lại nginx chỉ không làm được điều đó cho tôi. Trong thực tế, hàm phpini () tiếp tục hiển thị short_open_tag là Tắt. Tôi chỉ cần khởi động lại máy chủ và nó hoạt động. Khá quyết liệt, nhưng vẫn nhanh hơn nghiên cứu tại sao ...
Fran Marzoa

10

bạn cần bật short_open_tags.

short_open_tag = On

10

Đơn giản như vậy, hãy làm theo các bước sau:

  1. Đi đến php.initập tin
  2. Tìm short_open_tagvà đặt nó thànhon

    short_open_tag = On
  3. Khởi động lại máy chủ


9

Trong CentOS 6 (cũng được thử nghiệm trên Centos 7), bạn không thể đặt short_open_tag trong /etc/php.ini cho php-fpm. Bạn sẽ có lỗi:

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

Bạn phải chỉnh sửa cấu hình cho trang web của mình, có thể tìm thấy trong /etc/php-fpm.d/www.conf Và ghi vào cuối tệp:

php_value[short_open_tag] =  On

Phải làm điều này trên Debian Jessie. Điều này có thể áp dụng cho tất cả các cài đặt PHP5-FPM.
Bertrand

7

Nếu bạn đang sử dụng Ubuntuvới Apache+php5, sau đó trên các phiên bản hiện tại có 2 nơi mà bạn cần phải thay đổishort_open_tag = On

  1. /etc/php5/apache2/php.ini - đây là cho các trang được tải thông qua máy chủ web của bạn (Apache)
  2. /etc/php5/cli/php.ini- cấu hình này được sử dụng khi bạn khởi chạy các tệp php của mình từ dòng lệnh, như: php yourscript.php- dùng cho các tệp php được thực hiện thủ công hoặc cronjob trực tiếp trên máy chủ.

6

nếu bạn chỉnh sửa tệp php.ini, hãy nhớ khởi động lại dịch vụ của bạn (apache2, v.v.) để các chỉnh sửa thành php.ini có hiệu lực


5

Đối với người dùng Wamp Server có cách dễ dàng hơn: Bạn có thể kích hoạt cài đặt đó một cách đơn giản (trái) nhấp một lần vào biểu tượng WampServer, chọn PHP -> cài đặt PHP -> thẻ mở ngắn. Đợi một chút, sau đó WampServer sẽ tự động khởi động lại PHP và dịch vụ web của nó.

ban đầu từ: 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

nếu sử dụng xampp, bạn sẽ thấy tệp php.ini đã đề cập hai lần short_open_tag. Kích hoạt cái thứ hai thành short_open_tag = On. Cái đầu tiên được nhận xét và bạn có thể bị lôi cuốn và chỉnh sửa nó nhưng nó bị quá tải bởi một short_open_tag thứ hai


1

Nếu bạn đang sử dụng xampp trong windows thì hãy làm theo

  1. Mở bảng điều khiển XAMPP.
  2. Nhấp vào nút CONFIG.
  3. Đi đến tùy chọn PHP (php.ini).

Tìm short_open_tag bằng tiện ích ctrl + f

Bạn sẽ tìm thấy ;short_open_tag

vui lòng xóa dấu chấm phẩy (;) khỏi dòng.

và giữ nó như short_open_tag = on

Cuối cùng, khởi động lại máy chủ Apache của bạn


0

Để bật short_open_tag cho một tên miền cụ thể bằng php-fpm, bạn phải chỉnh sửa:

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

Trong đó xxxxx là số ổ cắm của tên miền.

Và thêm: php_value [short_open_tag] = Bật


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

Điều đó hoạt động trên php7.2 trên Ubuntu 16, câu trả lời tương tự như trên của Bradley Flood, mặc dù thư mục chứa tệp cấu hình được lưu trữ đã thay đổi.

Ngoài ra, bạn có thể thay đổi phiên bản trong chuỗi php để phù hợp với phiên bản hiện đang cài đặt của bạn.



-2

Tôi đã thay đổi short_open_tag thành On trên ví dụ aws centos 7 của tôi và php7 (PHP 7.0.33 (cli) (được xây dựng: ngày 6 tháng 12 năm 2018 22:30:44) (NTS)), nhưng nó không phản ánh trang thông tin php và mã. Vì vậy, tôi giới thiệu tài liệu có thể và tìm một giải pháp về trường hợp của tôi. Thêm một dòng bổ sung sau short_open_tag là asp_tags = Bật sau khi khởi động lại Apache Nó hoạt động trên mã và tôi đi đầu ra chính xác

tập tin 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

Đặt asp_tags = Onshort_open_tag = Ontrong cả các tập tin \apache\Apache2.2.21\bin\php.ini\bin\php\php5.3.8\php.ini và sau đó khởi động lại máy chủ apache.


6
asp_tags? để làm gì?
Ý thức chung của bạn

1
asp có lẽ là một lỗi đánh máy Tại sao cộng đồng không thể thể hiện một chút thương xót cho @kal?
n8bar
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.