从PHP执行html代码

时间:2014-07-29 00:51:42

标签: javascript php html

更新:找到解决方案!使用chrome开发人员工具,我发现问题是在/ Applications / blahblah中硬编码src文件。它在localhost / Applications / blahblah中寻找文件。现在,我已经将子目录中所需的.js文件复制到/ Library / WebServer / Documents /(其中localhost似乎从我的机器上开始)并编写了一条到那里的路径。谢谢你的帮助!


这里有PHP的新手。无法通过一些彻底的谷歌搜索找到我的答案,而且还有很多尝试自我调试。

我在自己的机器上做所有事情。

我有一个PHP类,它构建一个完整构成html页面的字符串,然后返回它。我的index.php脚本创建了这个类的一个实例,并调用了返回html的函数,并回显了它。当我执行这个类时,页面出现空白(使用chrome作为浏览器)。当我"查看来源"在空白页面上,我看到了我打算查看的html脚本。

如果我将该html脚本复制并粘贴到一个新文件中,blahblah.html并直接使用chrome加载blahblah.html,它就可以了。

可能的细微之处:html字符串包含一个javascript函数,该函数从我机器上的硬编码src目录中提取。

感谢您的帮助!让我知道我可能提供哪些更有用的信息。

编辑:这是代码:

的index.php:

<?php

function __autoload($class_name) 
{
  $source = '/Path/To/src/' . $class_name . '.php';
  if (file_exists($source)) require $source; 
  else throw new Exception('class "' . $class_name . '" source file not found. Failed to autoload...');
}

$myweb=new GenHCSplineIrregTime();

echo $myweb->genWeb();

?>

GenHCSplineIrregTime.php:

<?php

class GenHCSplineIrregTime
{
    public function __construct()
    {
        ;
    }

    public function __destruct()
    {
        ;
    }

    public function genWeb()
    {
        return $this->genEntireHTMLFile();
    }

    private function genEntireHTMLFile()
    {        
        $cont="";
        // $cont = $cont . "<!DOCTYPE HTML>\n";
        $cont = $cont . "<HTML>\n<head>\n";
        $cont = $cont . "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">\n";
        $cont = $cont . "<title>This is my title</title>\n";
        $cont = $cont . "<script type=\"text/javascript\" src=\"http://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js\"></script>\n";
        $cont = $cont . "<style type=\"text/css\">\n\${demo.css}\n</style>\n";
        $cont = $cont . "<script type=\"text/javascript\">\n";
        $cont = $cont . "\$(function () {\n\n$('#container').highcharts({\nchart: {\ntype: 'spline'\n},\n title: {\ntext: 'BATTERY SHIT'\n},\nsubtitle: {\ntext: 'Irregular time data in Highcharts JS'\n},\n";
        $cont= $cont . "xAxis: {\ntype: 'datetime',\ndateTimeLabelFormats: {\nmonth: '%e. %b',\nyear: '%b'\n},\ntitle: {\ntext: 'Date'\n}\n},\n";
        $cont= $cont . "yAxis: {\ntitle: {\ntext: 'Snow depth (m)'\n},\nmin: 0\n},\ntooltip: {\nheaderFormat: '<b>{series.name}</b><br>',\npointFormat: '{point.x:%e. %b}: {point.y:.2f} m'\n},\n";
        //data starts here
        $cont= $cont . "series: [{\nname: 'Winter 2007-2008',\ndata: [\n";
        $cont= $cont . "[Date.UTC(1970,  9, 27), 0   ],\n";
        $cont= $cont . "[Date.UTC(1970, 10, 10), 0.6 ],\n";
        $cont= $cont . "[Date.UTC(1970, 10, 18), 0.7 ]\n]\n}]\n";
        $cont= $cont . "});\n});\n";

        $cont= $cont . "</script>\n</head>\n<body>\n";
        $cont= $cont . "<script src=\"/Applications/BasicSoftware/Highcharts-4.0.3/js/highcharts.js\"></script>\n";
        $cont= $cont . "<script src=\"/Applications/BasicSoftware/Highcharts-4.0.3/js/modules/exporting.js\"></script>\n";
        $cont= $cont . "<div id=\"container\" style=\"min-width: 310px; height: 400px; margin: 0 auto\"></div>\n";
        $cont= $cont . "</body>\n</html>\n";

        return $cont;
    }

    private function fetchData()
    {
        $data="";

        return $data;
    }

}
?>

4 个答案:

答案 0 :(得分:2)

这是因为PHP是一种服务器端脚本语言,而不是像HTML那样的客户端脚本语言。它需要服务器才能运行。要在您的计算机上安装网络服务器,您需要使用WampServerXAMPP等软件。安装完成后,可以使用PHP。

更新:您的代码没有输出任何内容,因为GenHCSplineIrregTime类未正确导入 。您需要使用requireinclude(或require_onceinclude_once,取决于您需要的)语句来添加GenHCSplineIrregTime.php,但不能使用你做到了。你做了一些旧手册显示的内容:

//foo.php
<?php
class foo {
    public function __construct() {
        echo "hi";
    }
}
?>

//index.php
<?php
function __autoload($classname) {
    $filename = "./". $classname .".php";
    include_once($filename);
}

$obj = new foo();
?>

问题是,$classname是什么?代码不完整;它只会加载任何东西,真的,或一些不相关的文件。这就是为什么相反,你几乎总能看到:

//index.php
<?php
require 'foo.php';
$obj = new foo();
?>

更新2 :我很高兴您的问题已得到解决,但下次请特别注意页面的标题,这已被更改(因为除了HTML的Javascript部分工作)。因此,它不是一个完全空白的页面,因为你暗示(即没有HTML编译)。

答案 1 :(得分:0)

如果你的html代码在一个字符串中,比如说$ str,你只需要打印字符串的内容就像这样:

$str "<h1> Hello world ! </h1>";
echo $str;

如果你的html代码在另一个页面内,你需要做的就是在一个字符串中加载你的页面内容并打印出来:

   $str = file_get_contents("path_to/blahblah.html");
   echo $str;

答案 2 :(得分:0)

PHP仅在服务器上运行。

下载XAMPP并运行apache服务器。

下载并安装后,转到xampp文件夹,然后转到htdocs文件夹并将php文件放在那里。

然后导航到您的php文件所在的位置,例如:localhost:/index.php

然后你的PHP代码应该正常运行。

答案 3 :(得分:0)

如果您正在查看源代码中的HTML,那么您就知道正在打印HTML字符串。那么也许你正在用标题做点什么?当您从PHP打印时,Chrome可能不会期望接收HTML内容,但是当您使用相同的内容并将其放入带有.html扩展名的文件时,它是不容易的,因此它会自动呈现。尝试打开Chrome浏览器的开发工具,重新加载页面,然后查看网络&#39;查看您正在接收的标题。

如果您实际上正在打印html字符串,那么您已经在“来源”中验证了该字符串&#39;客户端(chrome)收到你知道你的PHP代码被评估。鉴于这是真的,并且没有试图猜测js脚本发生了什么,这是我唯一能想到的。