php <?= 표기에 대해서

negabaro의 이미지

php 5.4.30인 서버에서 사용되는 코드가 php 5.3코드에서 실행이 안됩니다.

버전문제인지 아니면 어떤 설정문제인지 확인할 수 있을까요?

사용안되는 코드: <?=$인수 ?>

●PHP 5.3.3

실패

  <html>
 <?=$column_tempHtml ?>
 </html>

이렇게 사용하면 가능

 <html>
<?php echo "$column_tempHtml"; ?>
</html>

●PHP 5.4.30

5.4에선 가능

 <html>
 <?=$column_tempHtml ?>
 </html>
peecky의 이미지

김정균의 이미지

<?=$var?>

위의 표현은 5.3 까지는 php.ini의 short_tags 옵션에 영향을 받습니다. 즉, short_tags가 off일 경우에는 사용할 수 없다는 얘기입니다. 하지만 php 5.4 부터는 short_tags가 off이더라도 위의 표현을 할 수 있도록 개선이 되었습니다.

그러므로, 님의 경우에는 php 5.4에서는 short_tags가 off이더라도 정상 동작했겠지만 5.3에서는 short_tags가 off이므로 동작을 하지 않는 것입니다.

그러므로, 5.3에서는 short_tags를 on을 해 주시든지 또는 아래의 patch를 적용해서 5.3을 빌드하시면 됩니다. (아래 패치는 안녕 리눅스의 PHP에 적용되어 있는 patch로 5.4의 기능을 back porting 한 것입니다.)

diff -urNp php-5.3.18.org/Zend/zend_language_scanner.c php-5.3.18/Zend/zend_language_scanner.c
--- php-5.3.18.org/Zend/zend_language_scanner.c 2012-10-18 01:21:41.000000000 +0900
+++ php-5.3.18/Zend/zend_language_scanner.c 2012-10-30 22:07:42.247544839 +0900
@@ -973,7 +973,9 @@ inline_char_handler:
        if (YYCURSOR < YYLIMIT) {
            switch (*YYCURSOR) {
                case '?':
-                   if (CG(short_tags) || !strncasecmp(YYCURSOR + 1, "php", 3)) { /* Assume [ \t\n\r] follows "php" */
+                   if (CG(short_tags)
+                       || *(YYCURSOR + 1) == '='
+                       || !strncasecmp((const char *) YYCURSOR + 1, "php", 3)) { /* Assume [ \t\n\r] follows "php" */
                        break;
                    }
                    continue;
@@ -1321,15 +1323,11 @@ yy45:
        yyleng = YYCURSOR - SCNG(yy_text);
 #line 1542 "Zend/zend_language_scanner.l"
        {
-   if (CG(short_tags)) {
        zendlval->value.str.val = yytext; /* no copying - intentional */
        zendlval->value.str.len = yyleng;
        zendlval->type = IS_STRING;
        BEGIN(ST_IN_SCRIPTING);
        return T_OPEN_TAG_WITH_ECHO;
-   } else {
-       goto inline_char_handler;
-   }
 }
 #line 1335 "Zend/zend_language_scanner.c"
 yy47:
diff -urNp php-5.3.18.org/Zend/zend_language_scanner.l php-5.3.18/Zend/zend_language_scanner.l
--- php-5.3.18.org/Zend/zend_language_scanner.l 2012-10-30 22:07:17.600893392 +0900
+++ php-5.3.18/Zend/zend_language_scanner.l 2012-10-30 22:07:42.248544584 +0900
@@ -1587,15 +1587,11 @@ NEWLINE ("\r"|"\n"|"\r\n")
 
 
 <INITIAL>"<?=" {
-   if (CG(short_tags)) {
-       zendlval->value.str.val = yytext; /* no copying - intentional */
-       zendlval->value.str.len = yyleng;
-       zendlval->type = IS_STRING;
-       BEGIN(ST_IN_SCRIPTING);
-       return T_OPEN_TAG_WITH_ECHO;
-   } else {
-       goto inline_char_handler;
-   }
+   zendlval->value.str.val = yytext; /* no copying - intentional */
+   zendlval->value.str.len = yyleng;
+   zendlval->type = IS_STRING;
+   BEGIN(ST_IN_SCRIPTING);
+   return T_OPEN_TAG_WITH_ECHO;
 }
 
 
@@ -1649,7 +1645,9 @@ inline_char_handler:
        if (YYCURSOR < YYLIMIT) {
            switch (*YYCURSOR) {
                case '?':
-                   if (CG(short_tags) || !strncasecmp(YYCURSOR + 1, "php", 3)) { /* Assume [ \t\n\r] follows "php" */
+                   if (CG(short_tags)
+                       || *(YYCURSOR + 1) == '='
+                       || !strncasecmp((const char *) YYCURSOR + 1, "php", 3)) { /* Assume [ \t\n\r] follows "php" */
                        break;
                    }
                    continue;
negabaro의 이미지

와..정말감사합니다!!

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.