我有一些与HTML混合的PHP代码,我需要将其存储到变量中,但我无法弄清楚我该怎么做。当执行此代码时,从调用函数并完美运行的短代码调用.PHP代码呈现HTML并显示来自数据库的信息,但现在我需要将结果(this html divs boxes with information from the database)
存储到变量中命令将此变量发送到wordpress中可以更新页面的函数。当我尝试它时,有一个错误,说回声没有被指出。我知道这个变量里面没有php代码,所以我怎么能这样做?将结果存储到变量?
任何建议都会非常苛刻 提前谢谢你:
$ultimosProyectosHome+="
echo '<div class="cont-proyectos">';
echo '<div style="text-align:center;"><a href="'. $url_actual .'"? page_id="'. $id_paginaFicha .'" target="_blank">';if($pregunta6Valor!=""){echo '<img src="http://www.xxx.xx/xxx/xxx/'.$pregunta6Valor.'" alt="Cover"></a></div>';} else{echo '<img src="'.$imgDesafio.'" alt="Cover"></a></div>';}
echo '<h3>';if($pregunta2Valor != ""){ echo $pregunta2Valor;}else{echo $Nodefinido;}echo'</h3>';
echo'<a href="'. $url_actual .'"?page_id="'. $id_paginaFicha .'" target="_blank">';
echo'<h4>';if($pregunta1Valor != ""){ echo $pregunta1Valor;}else{echo $Nodefinido;} echo'</h4>';
echo'</a>';
echo'<p>'; if($pregunta3Valor != ""){ echo getSubString($pregunta3Valor,198,$id_paginaFicha);}else{echo $Nodefinido;} echo'</p>';
echo'<div class="redesSocialesTLP" id="redes">';
echo'<a href="https://twitter.com/intent/tweet?url="'. $url_client .'"?page_id="'. $id_paginaFicha .'"&text="'. $pregunta1Valor .'" target="_blank">';
echo'<i class="fa fa-twitter fa-2x"></i>';
echo'</a>';
echo'<a href="https://www.facebook.com/sharer/sharer.php?u="'. $url_client .'"?page_id="'. $id_paginaFicha .'" target="_blank">';
echo'<i class="fa fa-facebook fa-2x"></i>';
echo'</a>';
echo'<a href="https://plus.google.com/share?url="'. $url_client .'"?page_id="'. $id_paginaFicha .'" target="_blank">';
echo'<i class="fa fa-google-plus fa-2x"></i>';
echo'</a>';
echo'</div>';
echo'</div>';
“;
答案 0 :(得分:2)
您的代码可能会受益于以下答案,但您正在做一个不同的,更危险的事情。您有一大堆HTML和PHP,并希望执行来存储其结果。为此,您需要eval()
之类的内容。或者等效地,您可以将代码写入具有不可知名称的临时PHP文件,然后将其重新包含在脚本中,同时将其包装在输出缓冲中。
我已经看到它使用&#34; sandbox&#34;服务器权限有限,但实施起来很复杂。
危险取决于代码的来源。如果其他人可以修改它,那么他将能够在您的服务器上执行任意代码,您肯定希望避免这种代码。
出于这个原因,已经开发了一些模板语言 - 你可以 例如,我想查看Twig。
否则,您现在可以:
$bunch = "<BUNCH OF MIXED CODE FROM ABOVE>";
ob_start();
try {
eval($bunch);
} catch (\Exception $err) {
print "There has been an error.";
}
$ultimosProyectosHome += ob_get_clean();
正确方法:
$html = '';
...
// Remove all occurrences of this
echo "Something";
// and this
echo "<br />";
// and write it like this instead.
$html .= 'Something';
$html .= '<br />';
如果您有生成输出的函数,这可能会变得很尴尬。您必须重写它们以返回输出(就像上面一样,以
结束) return $html;
然后无论你在哪里
callToFunction(parameters);
你将用
进行重构 echo callToFunction(parameters);
然后,进一步重构它以阅读
$html .= callToFunction(parameters)
迭代。
懒惰的方式
使用output buffering。每当你想要调试它时,一个很好的方法来记忆内存,失去对你的脚本的控制,并玩快乐的地狱(除非你使用Xdebug,但为什么一开始就做懒惰的事情?)。/ p>
ob_start();
...
$html = ob_get_clean();
答案 1 :(得分:0)
您正在寻找的是输出缓冲。
在回复您的内容之前致电ob_start();
,然后在结束时:
$content = ob_get_clean();
这两个函数之间输出的所有内容都将存储在$content
。
PHP manual还提供了有关这些功能的更多信息以及其他选项。
请记住,输出缓冲通常应该是最后的手段 - 不要在任何地方都这样做太舒服了!
顺便说一句,您可以通过结束PHP块echo
并在完成后再次启动?>
来避免对<?php
的所有调用。