我正在使用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);
以下是错误输出:
注意:未定义的变量:atts in /home3/ade207/public_html/wp-content/themes/armstrongparent/lib/shortcodes.php 第129行
注意:未定义的变量:col_and_gutter in /home3/ade207/public_html/wp-content/themes/armstrongparent/lib/shortcodes.php 第129行
注意:未定义的变量:gutter in /home3/ade207/public_html/wp-content/themes/armstrongparent/lib/shortcodes.php 第129行
注意:未定义的变量:gutter in /home3/ade207/public_html/wp-content/themes/armstrongparent/lib/shortcodes.php 在第131行
注意:未定义的变量:gutter in /home3/ade207/public_html/wp-content/themes/armstrongparent/lib/shortcodes.php 在第132行
注意:未定义的变量:gutter in /home3/ade207/public_html/wp-content/themes/armstrongparent/lib/shortcodes.php 在第133行
注意:未定义的变量:gutter in /home3/ade207/public_html/wp-content/themes/armstrongparent/lib/shortcodes.php 在第134行
注意:未定义的变量:gutter in /home3/ade207/public_html/wp-content/themes/armstrongparent/lib/shortcodes.php 在第135行
注意:未定义的变量:gutter in /home3/ade207/public_html/wp-content/themes/armstrongparent/lib/shortcodes.php 在第136行
注意:未定义的变量:gutter in /home3/ade207/public_html/wp-content/themes/armstrongparent/lib/shortcodes.php 第139行
注意:未定义的变量:id in /home3/ade207/public_html/wp-content/themes/armstrongparent/lib/shortcodes.php 第139行
注意:未定义的变量:id in /home3/ade207/public_html/wp-content/themes/armstrongparent/lib/shortcodes.php 第139行
注意:未定义的变量:id in /home3/ade207/public_html/wp-content/themes/armstrongparent/lib/shortcodes.php 在第140行
注意:未定义的变量:样式 /home3/ade207/public_html/wp-content/themes/armstrongparent/lib/shortcodes.php 在第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行
注意:未定义的变量:returnval in /home3/ade207/public_html/wp-content/themes/armstrongparent/lib/shortcodes.php 第141行
注意:未定义的变量:id in /home3/ade207/public_html/wp-content/themes/armstrongparent/lib/shortcodes.php 第141行
注意:未定义的变量:样式 /home3/ade207/public_html/wp-content/themes/armstrongparent/lib/shortcodes.php 第141行
注意:未定义的变量:col_and_gutter in /home3/ade207/public_html/wp-content/themes/armstrongparent/lib/shortcodes.php 第141行
注意:未定义的变量:gutter in /home3/ade207/public_html/wp-content/themes/armstrongparent/lib/shortcodes.php 第141行
注意:未定义的变量:类in /home3/ade207/public_html/wp-content/themes/armstrongparent/lib/shortcodes.php 在第142行
注意:未定义的变量:returnval in /home3/ade207/public_html/wp-content/themes/armstrongparent/lib/shortcodes.php 在第142行
注意:未定义的变量:内容 /home3/ade207/public_html/wp-content/themes/armstrongparent/lib/shortcodes.php 在第143行
注意:未定义的变量:returnval in /home3/ade207/public_html/wp-content/themes/armstrongparent/lib/shortcodes.php 在第144行
注意:未定义的变量:returnval in /home3/ade207/public_html/wp-content/themes/armstrongparent/lib/shortcodes.php 第145行
解析错误:语法错误,意外')'in /home3/ade207/public_html/wp-content/themes/armstrongparent/lib/shortcodes.php(148) :第1行的运行时创建函数
答案 0 :(得分:0)
@Passerby。谢谢,这让我想到了这个问题。
所有$变量都是空白区域!!这是因为heredoc执行自动变量替换。所以一个人可能想知道它在其他环境中是如何工作的:GoDaddy和Linode VPS但不在Hostgator上......
它在Hostgator上爆发的原因是因为当我第一次上传它时,Heredoc系列最初是Nowdoc。它抛出一个错误,所以我通过删除单引号将其更改为Heredoc。我根本没想过,愚蠢的是没有意识到变量替换中的所有变量因此所有变量都被替换为空字符串而不是保留为函数代码的字符串文字。
显然,Hostgator没有运行PHP 5.3或更高版本,这就是Nowdoc无法运行的原因。实际上,这意味着我需要修改脚本以便更加向后兼容。我可能只需要将所有变量转换为丑陋的样子。