簡體   English   中英

REST API部分起作用-PHP

[英]REST API partially working - PHP

我正在嘗試使用PHP創建基本的REST風格的API,但遇到一個奇怪的問題。 當我通過URL /rest/viewinput.php訪問我的頁面之一(viewinput.php)時,頁面加載正常。 當我嘗試通過/ rest / viewinput時,出現“找不到頁面”錯誤。

因此,這是確定請求類型和發送位置的代碼。 在我的server.php頁面上可以找到

//in server.php
public function serve() {
    $uri = $_SERVER['REQUEST_URI'];
    $method = $_SERVER['REQUEST_METHOD'];
    $paths = explode('/', $this->paths($uri));
    array_shift($paths); // 
    $resource = array_shift($paths);

if ($resource == 'rest') {
        $page = array_shift($paths);
        if (empty($page)) {
            $this->handle_base($method);
    } else {
    $this->handle_page($method, $page);
        }

    }
    else {
        // We only handle resources under 'clients'
        header('HTTP/1.1 404 Not Found');
    } 
}

由於它是具有確定頁面名稱的GET方法,因此它將被傳遞給此函數

//in server.php
private function handle_page($method, $page) {
    switch($method) {  

    case 'GET':
    if($page == "viewinput"){ //I have both viewinput.php and viewinput just to check both. Only viewinput.php works
       $this->display_info();
    }
     if($page == "viewinput.php"){
       $this->display_info();
    }

    default:
        header('HTTP/1.1 405 Method Not Allowed');
        header('Allow: GET, PUT, DELETE');
        break;
    }
}

然后從這里發送到

//in server.php
function display_info(){
$view = new ViewInputs(); 
$view->view();  //this function is on viewinput.php
}

因此,當我訪問/rest/viewinput.php時,視圖功能會正確顯示。 當我訪問/ rest / viewinput時,出現“鏈接斷開”錯誤。

我遵循了有關在此處找到的REST服務器的在線教程,並且效果很好。

以下是我的httpd.conf文件中

Options +FollowSymlinks
RewriteEngine on
RewriteRule ^/.* rest/server.php

這是我的viewinput.php文件。 我相信它工作正常(當頁面加載時,server.php上的serve函數應該運行。

<?
include_once 'server.php';
class ViewInputs{

  function view(){
      $sql = mysql_query("select * from entry");
      ?> 
      <table>
          <th>ID</th>
          <th>Text</th>
          <col width="200">
          <col width="150">
        <?
        while ($result = mysql_fetch_array($sql)){
            ?>
            <tr><td><? echo $result['id']." "; ?></td><td><? echo $result['text']; ?></td></tr>
            <?
        }
        ?> </table> <?
    }
}
$server = new server();
$server->serve(); 
?>

從httpd.conf。 我可能是錯的,但我相信這是如何允許.htaccess文件

DocumentRoot "C:/xampp/htdocs/rest"

<Directory />
   Options FollowSymLinks
   AllowOverride ALL
   Order deny, allow
   Deny from none
</Directory>

<Files ".ht*">
Require all ALLOW
</Files>

您的重寫規則未正確編寫。 發生的事情是,當您轉到rest / viewinput.php時,該文件實際上已經存在,因此可以運行。 當您進入rest / viewinput時,該文件不存在。 您可以通過轉到http://martinmelin.se/rewrite-rule-tester/來檢查您的重寫規則,您會發現您的重寫規則不好。

這樣做的目的是使您沒有veiwinput.php文件,所有內容都應直接發送到server.php文件。 您最希望的重寫規則是這樣的:

RewriteRule rest/* rest/server.php

如果您想真正進入viewinput.php,則根本沒有任何重寫規則,只是擺脫它。

如果要將rest / viewinput視為rest / viewinput.php,請使用以下命令:

RewriteRule ^rest/([a-z]+) rest/$1.php

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM