【问题标题】:Unable to execute a php script through CURL无法通过 CURL 执行 php 脚本
【发布时间】:2009-11-18 01:25:46
【问题描述】:

我有一个显示数据库数据的 PHP 脚本 A。

我还有另一个脚本 B,它获取脚本 A 的内容。但是我需要脚本 A 执行后的内容。但这并没有发生。

// 脚本A

    enter code here
 <?php
    session_start();
    if(!isset($_SESSION['username']))
        {   
         print "You have not logged in";
         header('Location: index.htm');

        }
    session_write_close();
    ?>   
     <?xml version="1.0"?>
        <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
        <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="cs" lang="cs">
        <head>
            <meta http-equiv="content-type" content="text/html; charset=utf-8" />
            <meta http-equiv

="content-language" content="cs" />
        <meta name="robots" content="all,follow" />

        <meta name="author" content="All: ... [Nazev webu - www.url.cz]; e-mail: info@url.cz" />
        <meta name="copyright" content="Design/Code: Vit Dlouhy [Nuvio - www.nuvio.cz]; e-mail: vit.dlouhy@nuvio.cz" />

        <title>WAVES 1.0!</title>
        <meta name="description" content="..." />
        <meta name="keywords" content="..." />

        <link rel="index" href="./" title="Home" />
        <link rel="stylesheet" media="screen,projection" type="text/css" href="./css/main.css" />
        <link rel="stylesheet" media="print" type="text/css" href="./css/print.css" />
        <link rel="stylesheet" media="aural" type="text/css" href="./css/aural.css" />
     <script type="text/javascript" src="js/jquery-1.2.6.pack.js"></script>

    <script language="javascript" type="text/javascript">
     function getQueryParams( val ) 
    {
            //Use the window.location.search if we don't have a val.
            var query = val || window.location.search;
            query = query.split('?')[1]
            var pairs = query.split('&');
            var retval = {};
            var check = [];
            for( var i = 0; i < pairs.length; i++ ) 
             {
                    check = pairs[i].split('=');
                    retval[check[0]] = check[1];
            }

            return retval;
    }

            var values = getQueryParams();
            var v = values['id'];      


    $(function() 
     {



     $.getJSON("getviewresults.php?id="+v, function(data)
         {

              $.each(data, function(entryIndex, entry) 
          {

          var name = entry['tid'];
          var user = entry['status'];
          var p= entry['description'];
          var f =  entry['time'];
          var stime = entry['stime'];


     $('<tr>  <td>'+name+'</td> <td > '+p+'</td> <td> '+user+'</td> <td>'+f+'</td> <td> <a href="staticlog.htm?id='+v+'&tid='+name+'&stime='+stime+'" target="_blank">Log </a> </td> <td><a href="staticslog.htm?id='+v+'&tid='+name+'&stime='+stime+'" target="_blank">Device Log </a> </td><td> <a href="viewethlog.php?id='+v+'&tid='+name+'&stime='+stime+'" target="_blank"> LAN </a>  </td> </tr> ').appendTo('#container');



      });
     });


      });

    </script>

    </head>

    <body>

    <!-- Main -->
    <div id="main" class="box">

        <!-- Header -->
        <div id="header" style="left: 0px; width: 100%; top: 1px; height: 61px">

            <!-- Logotyp -->
            <h1 id="logo" style="left: 46px; top: 19px"><a href="./" title="CrystalX [Go to homepage]">WAVES 1.0!<strong>!</strong><span></span></a></h1>
            <hr class="noscreen" />          
           <img src="Design/logo.jpg" style="right:0px; width: 134px; position: absolute;
                top: -2px; height: 61px" />




        </div> <!-- /header -->

         <!-- Main menu (tabs) -->
         <div id="tabs" class="noprint" style="width:100%; left: 0px; position: relative; top: 0px; height:24px">

                <h3 class="noscreen">Navigation</h3>
                <ul class="box">
                    <li><a href="home.php">Home<span class="tab-l"></span><span class="tab-r"></span></a></li>
                    <li><a href="package.php">Package<span class="tab-l"></span><span class="tab-r"></span></a></li>
                    <li ><a href="config.php">Configs<span class="tab-l"></span><span class="tab-r"></span></a></li>
                    <li><a href="live.php">Live<span class="tab-l"></span><span class="tab-r"></span></a></li>
                    <li id="active"><a href="results.php">Results<span class="tab-l"></span><span class="tab-r"></span></a></li>
                    <li><a href="logout.php">Log out<span class="tab-l"></span><span class="tab-r"></span></a></li>
                </ul>

            <hr class="noscreen" />
         </div> <!-- /tabs -->

        <!-- Page (2 columns) -->
        <!-- /page -->

      <div style="border-right: #336699 thin solid; border-top: #336699 thin solid; left: 0px;
            border-left: #336699 thin solid; width: 100%; border-bottom: #336699 thin solid;
            position: relative; top: 0px; height: 480px; overflow:auto">
            <table id="container" style="left: 0px; width:100%; position: relative; ">
                <tr>
                    <td style="width: 100px">
                        <strong>Testid</strong></td>
                    <td style="width: 382px">
                        <strong>Description</strong></td>
                    <td style="width: 100px">
                        <strong>Status</strong></td>
                    <td style="width: 100px">
                        <strong>Time Taken</strong></td>
                    <td style="width: 100px">
                        <strong>Log </strong></td>
                    <td style="width: 100px">
                        <strong>Device Log </strong></td>
                    <td style="width: 100px">
                        <strong>LAN </strong></td>



                </tr>
            </table>
        </div>

       </div>
        <!-- Footer -->
        <!-- /footer -->

     <!-- /main -->

    </body>
    </html>

// 脚本 B

            $ch = curl_init();
            $url = "http://localhost/waves/viewresults.htm?id=".$id;
            curl_setopt($ch, CURLOPT_HEADER, 0);
            curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);                   
curl_setopt($ch, CURLOPT_URL, $url);
            $data = curl_exec($ch);
            curl_close($ch);

          chdir("temp/file");
          $myFile = "summary.htm";
            $fh = fopen($myFile, 'w') or die("can't open file");
            fwrite($fh, $data);
            fclose($fh);

文件 summary.htm 只有脚本 A 的代码,这意味着它没有执行 nnd 因此没有来自数据库的数据。

我做错了什么?

【问题讨论】:

    标签: php html


    【解决方案1】:

    所以我开始回答时没有阅读您的代码,但现在看到您使用 JavaScript 从脚本 A 输出数据,而不是使用 PHP。

    为什么它不起作用:您正在使用客户端 JavaScript 在运行时动态创建一个表。这将在浏览器中正确呈现,但不会通过 curl 呈现。 libcurl 不支持 javascript。

    建议的解决方案 我建议您修改 getviewresults.php 并按照this tutorial 将输出缓冲到文件中,或者您也可以选择仅重写脚本 A 以使用服务器端脚本。

    这是一个非常有趣的问题,谢谢。

    【讨论】:

    • 同意此评论。您正在尝试使用 JavaScript 获取 ID。你需要用 PHP 重写它。除非您在其他地方使用此文件并试图避免重复,否则我看不出使用 JavaScript 的理由。
    • 感谢您的支持,先生!看来我们问题的作者正在使用 jQuery,并且有一个返回 JSON 字符串的 PHP 脚本。这两件事齐头并进,直到您尝试从传统浏览器之外的某个地方访问它。我仍然认为最紧凑的解决方案是修改 getviewresults.php 但另一个可行的选择是创建另一个 php 页面以提供所需的特定数据。
    【解决方案2】:

    尝试将“viewresults.htm”重命名为“viewresults.php”,以便将其解析为 PHP(您可以使用 mod_rewrite 在内部将 viewresults.htm 重定向到 viewresults.php,这样您的网址就不会改变)。

    【讨论】:

    【解决方案3】:

    在浏览器中打开您尝试获取的 URL - 即 http://localhost/waves/viewresults.htm?id=X(正确值为 X) - 并查看输出的内容。

    如果您仍然在浏览器中看到 PHP 代码,那么您就知道该文件没有被解析为 PHP。默认情况下,只有以.php 结尾的文件名将作为 PHP 执行。

    另外,我认为脚本 A 中的代码无论如何都不会正确执行,因为不会设置会话变量。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-02-17
      • 2011-07-03
      • 1970-01-01
      • 2017-07-04
      • 1970-01-01
      • 2018-09-15
      • 1970-01-01
      • 2017-03-21
      相关资源
      最近更新 更多