0

我正在使用 PHP create_function 创建一个 Lamba 风格的函数,其内容由 heredoc 风格的字符串定义。一切都很好,直到我将代码移至 Hostgator 帐户。Hostgator 环境的某些原因导致该功能完全失败。

看起来 heredoc 工作正常,并且 create_function 似乎正在执行。但是当函数本身被调用时,它会抛出大量错误,声称每个局部变量都是未定义的!我很困惑!有人见过这个吗?这是代码:

$func_code = <<<EOT
extract( shortcode_atts( array('style' => '','class' => '', 'id' => '', 'gutter' => 'm'), $atts ) );
$col_and_gutter = isset($gutter) ? 'needle-' . $gutter : 'needle-m';

switch ($gutter) {
    case 'ew': $gutter = 'col-extra-wide-gutter'; break;
    case 'w': $gutter = 'col-wide-gutter'; break;
    case 'm': $gutter = 'col-med-gutter'; break;
    case 'n': $gutter = 'col-narrow-gutter'; break;
    case 'none': $gutter = 'col-no-gutter'; break;
}

if ($id != '') $id = 'id="' . $id . '"';
if ($style != '') $style = 'style="' . $style . '"';
$returnval =  '<div ' . $id . ' ' . $style . ' class="col-responsive ' . $col_and_gutter . " " . $gutter . " " . $class . '">';

$returnval .= '<div class="g1"><div class="g2"><div class="g3">' . do_shortcode($content) . '</div></div></div>';
$returnval .= '</div>';
return $returnval;
EOT;            

$func_code = str_replace('needle', $shortcode, $func_code);
$func_handle = create_function('$atts,$content', $func_code); 
add_shortcode($shortcode, $func_handle);
add_shortcode($shortcode . '-n', $func_handle);
add_shortcode($shortcode . '-nn', $func_handle);

这是错误输出:

注意:未定义的变量:/home3/ade207/public_html/wp-content/themes/armstrongparent/lib/shortcodes.php 中的 atts 在第 129 行

注意:未定义变量:第 129 行 /home3/ade207/public_html/wp-content/themes/armstrongparent/lib/shortcodes.php 中的 col_and_gutter

注意:未定义变量:第 129 行 /home3/ade207/public_html/wp-content/themes/armstrongparent/lib/shortcodes.php 中的 gutter

注意:未定义变量:第 131 行 /home3/ade207/public_html/wp-content/themes/armstrongparent/lib/shortcodes.php 中的 gutter

注意:未定义的变量:第 132 行 /home3/ade207/public_html/wp-content/themes/armstrongparent/lib/shortcodes.php 中的 gutter

注意:未定义的变量:第 133 行 /home3/ade207/public_html/wp-content/themes/armstrongparent/lib/shortcodes.php 中的 gutter

注意:未定义的变量:第 134 行 /home3/ade207/public_html/wp-content/themes/armstrongparent/lib/shortcodes.php 中的 gutter

注意:未定义变量:第 135 行 /home3/ade207/public_html/wp-content/themes/armstrongparent/lib/shortcodes.php 中的 gutter

注意:未定义变量:第 136 行 /home3/ade207/public_html/wp-content/themes/armstrongparent/lib/shortcodes.php 中的 gutter

注意:未定义的变量:第 139 行 /home3/ade207/public_html/wp-content/themes/armstrongparent/lib/shortcodes.php 中的 gutter

注意:未定义的变量:第 139 行 /home3/ade207/public_html/wp-content/themes/armstrongparent/lib/shortcodes.php 中的 id

注意:未定义的变量:第 139 行 /home3/ade207/public_html/wp-content/themes/armstrongparent/lib/shortcodes.php 中的 id

注意:未定义的变量:第 140 行 /home3/ade207/public_html/wp-content/themes/armstrongparent/lib/shortcodes.php 中的 id

注意:未定义变量:第 140 行 /home3/ade207/public_html/wp-content/themes/armstrongparent/lib/shortcodes.php 中的样式

注意:未定义变量:第 140 行 /home3/ade207/public_html/wp-content/themes/armstrongparent/lib/shortcodes.php 中的样式

注意:未定义的变量:第 141 行 /home3/ade207/public_html/wp-content/themes/armstrongparent/lib/shortcodes.php 中的样式

注意:未定义变量:第 141 行 /home3/ade207/public_html/wp-content/themes/armstrongparent/lib/shortcodes.php 中的 returnval

注意:未定义变量:第 141 行 /home3/ade207/public_html/wp-content/themes/armstrongparent/lib/shortcodes.php 中的 id

注意:未定义的变量:第 141 行 /home3/ade207/public_html/wp-content/themes/armstrongparent/lib/shortcodes.php 中的样式

注意:未定义变量:第 141 行 /home3/ade207/public_html/wp-content/themes/armstrongparent/lib/shortcodes.php 中的 col_and_gutter

注意:未定义变量:第 141 行 /home3/ade207/public_html/wp-content/themes/armstrongparent/lib/shortcodes.php 中的 gutter

注意:未定义变量:第 142 行 /home3/ade207/public_html/wp-content/themes/armstrongparent/lib/shortcodes.php 中的类

注意:未定义的变量:第 142 行 /home3/ade207/public_html/wp-content/themes/armstrongparent/lib/shortcodes.php 中的 returnval

注意:未定义变量:第 143 行 /home3/ade207/public_html/wp-content/themes/armstrongparent/lib/shortcodes.php 中的内容

注意:未定义变量:第 144 行 /home3/ade207/public_html/wp-content/themes/armstrongparent/lib/shortcodes.php 中的 returnval

注意:未定义的变量:第 145 行 /home3/ade207/public_html/wp-content/themes/armstrongparent/lib/shortcodes.php 中的 returnval

解析错误:语法错误,/home3/ade207/public_html/wp-content/themes/armstrongparent/lib/shortcodes.php(148) 中的意外')':第 1 行运行时创建的函数

4

1 回答 1

0

@过路人。谢谢,这让我解决了这个问题。

所有 $ 变量都是空白区域!这是因为heredoc 会自动进行变量替换。所以有人可能想知道它为什么在其他环境中运行良好:GoDaddy 和 Linode VPS,但在 Hostgator 上却不行......

它在 Hostgator 上崩溃的原因是,当我第一次上传 Heredoc 行时,它最初是一个 Nowdoc。它抛出了一个错误,所以我通过删除单引号将其更改为 Heredoc。我根本没有想到,并且愚蠢地没有意识到这会引发变量替换,因此所有变量都被替换为空字符串,而不是作为函数代码的字符串文字。

显然,Hostgator 没有运行 PHP 5.3 或更高版本,这就是 Nowdoc 不起作用的原因。实际上,这意味着我需要修改脚本以使其更加向后兼容。我可能只需要逃避所有看起来丑陋的变量。

于 2013-07-24T04:21:31.080 回答