Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/6.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 Can';找不到resources.json_Php_Restler_Swagger - Fatal编程技术网

Php Can';找不到resources.json

Php Can';找不到resources.json,php,restler,swagger,Php,Restler,Swagger,出于某种原因,当我使用Restler的API Explorer(一个招摇过市的UI分支)将我的API部署到生产环境中时,当我加载时,它会给我一个一般的404错误: /api/explorer 当我更明确地陈述: /api/explorer/index.html 它加载页面的框架,但在标题下方以红色文本报告“404:notfound../resources.json”: 我相当肯定,当同样的文件在本地工作时,会有一些环境问题爆发。我还检查了/api/explorer目录中的.htaccess

出于某种原因,当我使用Restler的API Explorer(一个招摇过市的UI分支)将我的API部署到生产环境中时,当我加载时,它会给我一个一般的404错误:

/api/explorer
当我更明确地陈述:

/api/explorer/index.html
它加载页面的框架,但在标题下方以红色文本报告“404:notfound../resources.json”:

我相当肯定,当同样的文件在本地工作时,会有一些环境问题爆发。我还检查了
/api/explorer
目录中的.htaccess文件,在我看来它是正确的:

DirectoryIndex index.php
<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteRule ^$ index.html [QSA,L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.html [QSA,L]
</IfModule>
DirectoryIndex.php
重新启动发动机
重写规则^$index.html[QSA,L]
重写cond%{REQUEST_FILENAME}-F
重写cond%{REQUEST_FILENAME}-D
重写规则^(.*)$index.html[QSA,L]

任何帮助都将不胜感激。

您可以在Restler Github页面上查看自述文件

是否添加了“Luracast\Restler\Resources”类以在API根目录下创建Resources.json

在您自己的index.php中,addAPIClass部分应该如下所示:

$r=new Restler()

$r->addAPIClass('Luracast\\Restler\\Resources')//这将在API根目录下创建resources.json

/。。。您自己的addApiClass

$r->handle()


它在文档中的“使用”下,但我也很难弄清楚这一点…

结果表明,所有问题都归结为mod_重写问题。我仍然不能100%理解为什么这个问题出现在一个环境中,而在另一个环境中却没有出现完全相同的
httpd.conf
.htaccess
。哦,解决方案是使用
RewriteBase
指令在重写规则中明确说明您的基本url

在API目录中,我现在有以下
.htaccess
文件:

DirectoryIndex index.php
<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /api
    RewriteRule ^$ index.php [QSA,L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php [QSA,L]
</IfModule>
为了解决这个问题,我遇到了一个非常宝贵的技巧,就是打开Apache的mod_重写日志

# Adding logging for Rewrites
RewriteLog logs/rewrite.log
RewriteLogLevel 2
将其放在
httpd.conf
的任何全局范围的区域中;我把它放在已经有关于日志记录的条目周围,但是如果你更喜欢的话,你也可以把它放在末尾。此外,有关重写疑难解答的基本知识包括(如果这是基本知识,请道歉):

  • 确保您的httpd.conf为您提供Restler的目录设置了
    AllowOverride All
    选项FollowSymLinks
  • 您可以将所有配置放在
    httpd.conf
    中,并完全避免
    .htaccess
    文件(这样做也会快一点),但如果这样做,请记住
    httpd.conf
    .htaccess
    的相对url引用有绝对url引用

  • 确保在api根目录中有具有写入权限的缓存目录

    具体是什么?我已经看过很多次自述,但正如我妻子会告诉你的那样,我有时看不到我面前的是什么。是的,我做到了。事实上,相同的文件(在/restler和/api目录中)在我的桌面开发环境中可以正常工作,但在生产环境和笔记本电脑环境中(矛盾的是,使用dropbox从工作的开发环境镜像过来)都不工作(aka,上面有错误)。注意:我已将RewriteLogLevel设置为2,因为这样可以提供有用的信息,而不会太健谈。
    # Adding logging for Rewrites
    RewriteLog logs/rewrite.log
    RewriteLogLevel 2