Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/253.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 为什么我的$请求[';请求';]变量未定义(当访问API的端点时)_Php_.htaccess_Rest - Fatal编程技术网

Php 为什么我的$请求[';请求';]变量未定义(当访问API的端点时)

Php 为什么我的$请求[';请求';]变量未定义(当访问API的端点时),php,.htaccess,rest,Php,.htaccess,Rest,我按照教程使用PHP创建了一个RESTful API 我正在localhost上运行该项目,但是在尝试查看教程(api/v1/example)中建议的端点时,出现以下错误: (注意:请参见下面的api.php文件。) 这个请求索引应该在htaccess文件中设置,所以我认为这就是问题所在。(如果这件事很简单,我很抱歉,但我一直在努力寻找自己,但没有运气。)你能帮忙吗 在本教程中,我们创建: htaccess文件,用于配置web服务器应如何处理对项目目录中文件的请求 一个抽象类,用于处理URI的解

我按照教程使用PHP创建了一个RESTful API

我正在localhost上运行该项目,但是在尝试查看教程(api/v1/example)中建议的端点时,出现以下错误:

(注意:请参见下面的api.php文件。)

这个请求索引应该在htaccess文件中设置,所以我认为这就是问题所在。(如果这件事很简单,我很抱歉,但我一直在努力寻找自己,但没有运气。)你能帮忙吗

在本教程中,我们创建:

  • htaccess文件,用于配置web服务器应如何处理对项目目录中文件的请求
  • 一个抽象类,用于处理URI的解析并返回 答复
  • 一个具体的类,由 API
  • htaccess文件
    
    重新启动发动机
    重写cond%{REQUEST_FILENAME}-F
    重写cond%{REQUEST_FILENAME}-D
    重写规则api/v1/(*)$api/v1/api.php?请求=$1[QSA,NC,L]
    
    抽象类
    
    
    混凝土类
    
    
    api.php
    $\u REQUEST
    是客户端发送的请求变量数组。密钥
    请求
    不保证存在于该数组中。正在尝试使用调试器或
    var\u dump
    显示数组的内容


    如果您用发送的请求更新您的问题,可能有人会进一步指导您。

    $\u request
    是客户端发送的请求变量数组。密钥
    请求
    不保证存在于该数组中。正在尝试使用调试器或
    var\u dump
    显示数组的内容


    如果您用发送请求更新您的问题,可能有人会进一步指导您。

    阅读.htaccess文件时,您需要一个更像这样的层次结构:

    API
    ├── api
    │   └── v1
    │       └── api.php
    └── .htaccess
    
    其中API当前是文档根目录的子文件夹(将来可能会将API设置为文档根目录或相应地移动文件)

    API/.htaccess
    的内容:

    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule api/v1/(.*)$ api/v1/api.php?request=$1 [QSA,NC,L]
    
    API/API/v1/API.php的内容(检查重写是否有效):

    应重写为api.php文件(通过重写规则),并且api.php应输出:

    array(1) { ["request"]=> string(3) "foo" }
    

    读取.htaccess文件时,您需要一个更像这样的层次结构:

    API
    ├── api
    │   └── v1
    │       └── api.php
    └── .htaccess
    
    其中API当前是文档根目录的子文件夹(将来可能会将API设置为文档根目录或相应地移动文件)

    API/.htaccess
    的内容:

    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule api/v1/(.*)$ api/v1/api.php?request=$1 [QSA,NC,L]
    
    API/API/v1/API.php的内容(检查重写是否有效):

    应重写为api.php文件(通过重写规则),并且api.php应输出:

    array(1) { ["request"]=> string(3) "foo" }
    

    您是否在发送请求时发送请求变量?如果您访问
    api/v1/foo
    它是否有效?@Progrock我刚刚尝试过。它给出了相同的错误。您的文件路径与.htaccess重写规则路径不同。您的文件层次结构是什么?您的.htaccess文件放在哪里?@Progrock我有一个名为API的项目文件夹,我的所有文件都在根级别(.htaccess、API.php、API.class.php和MyAPI.class.php)。然后我访问这个端点:你在发送请求时发送请求变量吗?如果你访问
    api/v1/foo
    它能工作吗?@Progrock我刚刚试过了。它给出了相同的错误。您的文件路径与.htaccess重写规则路径不同。您的文件层次结构是什么?您的.htaccess文件放在哪里?@Progrock我有一个名为API的项目文件夹,我的所有文件都在根级别(.htaccess、API.php、API.class.php和MyAPI.class.php)。然后我访问了这个端点:谢谢。我对这个过程的理解是,请求变量是在htaccess文件中设置的:(RewriteRule api/v1/(.*)$api/v1/api.php?request=$1[QSA,NC,L]),应该包含完整的URL,然后将在抽象api.class的构造函数中解析,正如您在构造函数的这一行中所看到的:$this->args=explode('/',rtrim)($request,“/”);…我们的想法是从URI字符串中检索端点。我输出了$_request变量,但它是空的……您认为是我的htaccess没有正确执行重写吗?谢谢。我对该过程的理解是,请求变量设置在htaccess文件中:(RewriteRule api/v1/(*)$api/v1/api.php?request=$1[QSA,NC,L]),应该包含完整的URL,然后将在抽象api.class的构造函数中解析,正如您在构造函数的这一行中看到的:$this->args=explode('/',rtrim($request,'/'))…想法是从URI字符串中检索端点。我输出了$_请求变量,它是空的…您认为是我的htaccess没有正确执行重写吗?谢谢。从您的回答中得到启发,我没有更改文件结构。我只是更改了.htaccess文件,如下所示:RewriteEngine OnRewriteRule(.*)$api.php?request=$1[QSA,NC,L]现在可以工作了(在访问或时设置请求变量)。如您所见,我还取出了两行RewriteCond,因为它们不允许RewriteRule继续。感谢您的帮助。是的,您可以这样做。我会保留另外两行,这对我来说很好。谢谢。受您回答的启发,我没有更改文件结构。我只是更改了.htaccess文件,如下所示:RewriteRule(.*)$api.php?request=$1[QSA,NC,L]上的RewriteEngine正在运行(在访问或时设置请求变量).正如你所看到的,我还取出了两行RewriteCond,因为它们不允许RewriteRule继续。谢谢你的帮助。是的,你可以这样做。我会保留另外两行,这对我来说很好。
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule api/v1/(.*)$ api/v1/api.php?request=$1 [QSA,NC,L]
    
    <?php
    var_dump($_REQUEST);
    
    example.com/API/api/v1/foo
    
    array(1) { ["request"]=> string(3) "foo" }