2015-09-10 112 views
0

我需要能夠在表單中輸入IP地址,然後使用IP獲取在http://'IP'上運行的status.php頁面, :port/status.php,然後在窗體下面顯示內容。如何在zend框架中使用此php代碼1.12

我附加了兩個index.php和status.php文件。他們在zend之外工作。

我該如何做到這一點與zend 1.12?

status.php

<?php 

/*error_log(date("U").": ".implode(", ",array_keys(($_REQUEST)))."\n",3,"/tmp/phperror.log"); 
if(!isset($_REQUEST['ip'])) 
exit(0); 
*/ 
$ip = $_POST['IP']; 


function getIP($ip) 
{ 
    $port = ($_REQUEST[ 'port' ] != "" ? $_REQUEST[ 'port' ] : '1234'); 
    $site='http://'.$ip.':'.$port.'/status.php'; 
    //foreach($_REQUEST as $k => $v) 
    if ($_REQUEST[ 'mode' ] != 'json') { 
     //error_log(date("U").": ".$site." : ".implode($_REQUEST)."\n",3,"/tmp/phperror.log"); 
     error_log(date("U") . ": " . $site . " : " . implode(", ", array_keys(($_REQUEST))) . "\n", 3, "/tmp/phperror.log"); 
     $file = file_get_contents($site, false, $context); 
     echo $file; 
    } 
    else { 
     if ($_SERVER[ 'REQUEST_METHOD' ] == 'POST') { 
      $r = $site . "?d=v"; 
      $data = array(); 
      foreach ($_REQUEST as $key => $value) { 
       $r .= "&$key=$value"; 
       $data[ $key ] = $value; 
      } 
      $options = array('http' => array(
       'method' => 'POST', 
       'content' => http_build_query($data) 
      )); 
      error_log(date("U") . ": " . $r . "\n", 3, "/tmp/phperror.log"); 
      $context = stream_context_create($options); 
      //$file = file_get_contents($r, false, $context); 
      $file = file_get_contents($site, false, $context); 
      echo $file; 
     } 
    } 
} 

getIP($ip); 
?> 

指數。 PHP

<!DOCTYPE html> 
<html lang="en"> 
<head> 
    <title>Title</title> 
    <meta charset="UTF-8"> 
    <meta name=description content=""> 
    <meta name="viewport" content="width=device-width, initial-scale=1.0"> 
    <!-- Bootstrap CSS --> 
    <link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css" rel="stylesheet" media="screen"> 
</head> 
<body> 
    <div class="container"> 
     <div class="row"> 
      <div class="col-xs-12 col-sm-12 col-md-12 col-lg-12"> 
       <h1 class="text-center">IP Address</h1> 
       <form action="status.php" method="post" role="form" class="form-horizontal"> 

        <div class="form-group"> 
         <label for="IP" class="col-sm-2 control-label">Enter IP Address</label> 
         <div class="col-sm-10"> 
          <input type="text" class="form-control" name="IP" id="IP" placeholder="IP Address"> 
         </div> 
        </div> 


        <button type="button" class="btn btn-primary" onclick="deleteFile()">Submit</button> 
        <button type="reset" class="btn btn-danger">Clear</button> 
       </form> 
      </div> 
      <div id="section"></div> 
     </div> 
    </div> 

    <!-- jQuery --> 
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
    <!-- Bootstrap JavaScript --> 
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js"></script> 
    <script> 

     /* Deletes the selected file */ 
     function deleteFile() { 
      $.ajax({ 
       type: "POST", 
       url: "status.php", 
       data: { 
        IP: $("#IP").val() 
       } 
      }) 
       .success(function (data) { 
        $('#section').html(data); 
       }); 
     } 
    </script> 
</body> 

編輯:

我跟着盧西恩的步驟,我相信我沒有我的控制器正確上的indexAction。

我粘貼status.php存在和它的示數....我有什麼錯

indexcontroller.php

<?php 

class IndexController extends Zend_Controller_Action 
{ 

public function init() 
{ 
    /* Initialize action controller here */ 
} 

public function indexAction() 
{ 


/*error_log(date("U").": ".implode(", ",array_keys(($_REQUEST)))."\n",3,"/tmp/phperror.log"); 
if(!isset($_REQUEST['ip'])) 
exit(0); 
*/ 
$ip = $_POST['IP']; 


function getIP($ip) 
{ 
    $port = ($_REQUEST[ 'port' ] != "" ? $_REQUEST[ 'port' ] : '1234'); 
    $site='http://'.$ip.':'.$port.'/status.php'; 
    //foreach($_REQUEST as $k => $v) 
    if ($_REQUEST[ 'mode' ] != 'json') { 
     //error_log(date("U").": ".$site." : ".implode($_REQUEST)."\n",3,"/tmp/phperror.log"); 
     error_log(date("U") . ": " . $site . " : " . implode(", ", array_keys(($_REQUEST))) . "\n", 3, "/tmp/phperror.log"); 
     $file = file_get_contents($site, false, $context); 
     echo $file; 
    } 
    else { 
     if ($_SERVER[ 'REQUEST_METHOD' ] == 'POST') { 
      $r = $site . "?d=v"; 
      $data = array(); 
      foreach ($_REQUEST as $key => $value) { 
       $r .= "&$key=$value"; 
       $data[ $key ] = $value; 
      } 
      $options = array('http' => array(
       'method' => 'POST', 
       'content' => http_build_query($data) 
      )); 
      error_log(date("U") . ": " . $r . "\n", 3, "/tmp/phperror.log"); 
      $context = stream_context_create($options); 
      //$file = file_get_contents($r, false, $context); 
      $file = file_get_contents($site, false, $context); 
      echo $file; 
     } 
    } 
} 

getIP($ip); 
    ?> 

} 
+1

什麼是Zend錯? – ankhzet

+0

是什麼讓你認爲它在zend中不起作用? –

+0

我從來沒有使用它,所以我不知道我會添加什麼和什麼語法使用。 – Linax

回答

1

首先創建一個使用HTML佈局(layout.phtml) index.php的內容是靜態的,並在每個頁面上重複。

第二個創建一個控制器,並將php從status.php放入控制器內的一個動作中。

第三個爲控制器創建一個相應的視圖,並回顯控制器操作中計算出的所有內容。

四創建一個Zend表格HTML表單...

你可以做更多的事情,但我會adivse你從基礎開始(步驟1 - 3)。 有關在Zend的視圖/控制器/操作的詳細信息,看看:

http://framework.zend.com/manual/1.12/de/zend.controller.action.html

編輯:

有一些快速啓動的骨架,可以幫助你快速啓動應用程序。看看

https://github.com/RichardKnop/zend-v112-skeleton

你會發現所提到的東西,如「控制器」,「行動」,該文件中的「查看」 /骨架內的文件夾,只需將它們定製您的需求。

編輯2

可以從控制器傳遞數據到使用$這 - >視圖來自控制器的視圖。 對於這個結帳計算器: Zend Framework, passing variables to view

+0

您可以在第3步中闡述如何從我的示例代碼中「回顯出計算出的所有內容」。 – Linax

+0

我完成了佈局,將status.php代碼粘貼到indexcontroller.php的indexaction並設置了表單。 到目前爲止我有一個錯誤 「(!)解析錯誤:語法錯誤,60行中的/var/www/html/test/application/controllers/IndexController.php文件的意外結束」 我不知道這是否會清除我「回聲看到的一切」 – Linax

+0

請發佈一個新的問題,你有進一步的問題。嘗試僅使用骨架來設置正在運行的頁面。當一切都沒有錯誤的時候,開始根據你的需求逐步定製控制器/視圖,這意味着改變一些東西,如果它有效,立即嘗試。小步驟思考。 –