【问题标题】:Cannot turn off short_open_tag with ini_set无法使用 ini_set 关闭 short_open_tag
【发布时间】:2011-04-12 09:48:52
【问题描述】:

我正在将一个 javascript 语法荧光笔嵌入到一个 PHP 脚本中,该脚本读取源文件并将其回显。 js荧光笔在一行上有这个字符串:

... [z,/^[^<?]+/], ...

short_open_tag 在此服务器上打开,字符串中的<? 会混淆脚本并导致错误。我无法在 php.ini 或其他地方关闭。

我在同一个脚本中使用过ini_set('short_open_tag', '0');,但是没有生效。可能是什么问题?

编辑

最后,我使用了 Col Shrapnel 在评论中建议的内容:
我把[z,/^[^<?]+/],改成了[z,/^[^<?php echo '<' .'?'; ?>]+/],

【问题讨论】:

  • 在同一个脚本中执行它是没有意义的。你不觉得吗?
  • a javascript syntax highlighter 表示“PHP代码高亮JS代码”还是“JS代码高亮PHP代码”?
  • ini_set 可能已在服务器上禁用,请联系您的服务器管理员以确保它已启用。
  • 我正在使用 Google 的语法高亮器,它是 javascript 代码,可以高亮显示任何代码,无论是 PHP、JS、CSS...
  • @Omid Amraei - 我不想影响此服务器上的其他 PHP 脚本甚至同一目录中的其他 PHP 脚本的这种行为,所以我需要告诉这个脚本忽略短打开标签和不要把它们当成下面是PHP代码

标签: configuration php


【解决方案1】:

'short_open_tag' 在 PHP

【讨论】:

    【解决方案2】:

    根据this manual page的评论:

    在 gmail dot com 上的 libkhorse 2009 年 8 月 6 日 07:14:

    对于“short_open_tag”,虽然它 在可更改中标记为 PHP_INI_ALL 列,您应该注意 CHANGE_LOG 列也:

    PHP 中的 PHP_INI_ALL 中的 PHP_INI_PERDIR

    所以从 4.0 开始,如果你 想用 ini_set('short_open_tag') 来 即时更改它的值。

    尝试改用.htaccess:

    php_flag short_open_tag off 
    

    【讨论】:

    • 虽然我说过我不能以其他方式更改设置,但有些答案规定使用.htaccess。我应该解释原因。附带说明一下,我不明白为什么将此设置更改为 PHP_INI_PERDIR,因为这是一个合法的用例,现在不可能。
    • @Majid:我没有真正看到用例。荧光笔可以很容易地包含文本“short_open_tag 无论如何都应该在你的服务器上关闭。
    • 嗯,它根本没有!我现在使用的方法会解决这个问题:blah blah <?php ... -> blah blah <?php echo '<' . '?php'; ?> ...。
    • @Majid:我不明白你的意思,或者“blah”应该代表什么。无论如何,你有你的答案。
    【解决方案3】:

    我发现你的荧光笔和关闭短打开标签之间没有任何联系。

    如果您的某些代码与短标签混淆,您必须手动重写您的代码,将短标签替换为长标签。或者至少运行一些代码来做到这一点。
    但是没有配置设置会为你做这件事。

    此外,我认为 JavaScript 代码无法读取带有所有这些短标签或长标签的 PHP 文件 source。

    您的问题似乎出在其他地方。

    【讨论】:

    • 这里是连接:在荧光笔js中存在一个小短打开标签。由于这个 js 嵌入在 PHP 脚本中,因此它是该页面的一部分,当 short_open_tag 处于打开状态时,PHP 认为短打开标签后面的内容是 PHP 代码,而事实并非如此,它会尝试解析它认为是 PHP 的内容代码并输出“解析错误:语法错误,意外的']'错误。如果我可以关闭 short_open_tag,问题就会解决。
    • @Majid 说得通。但是为什么你将 js.code 放入 PHP 文件而不是使用 <script src> 调用它?
    • 感谢 Col,阅读了答案,现在我认为这是唯一的解决方案了。
    • @Majid 不是唯一的,您实际上可以打开 PHP 标记并在 PHP 中打印此语句,如下所示:[z,/^[^<?php echo "<?"?>]+/] 但 script src 无论如何都是最好的解决方案,这是包含的一般方法js文件转换成HTML页面,让浏览器能够缓存它。
    • 哈哈!真的!我正在(脾气暴躁)将嵌入更改为脚本源的路上,但这救了我。我完全同意这是首选方式,但我有充分的理由采用这次嵌入方式。
    猜你喜欢
    • 1970-01-01
    • 2011-09-25
    • 2012-04-19
    • 1970-01-01
    • 2014-09-17
    • 2014-04-28
    • 1970-01-01
    • 2011-04-03
    • 1970-01-01
    相关资源
    最近更新 更多