1

我为已经部署的 php 应用程序提供支持,但它的工作方式对我来说是新的,我不知道它是如何工作的。

基本上,使用类似路径的语法调用 php 方法来检索数据,例如:

<?php
// .....
$json = Request("http://_server/myfolder/abc/default/mymethod?data=something");
// Now $json var has some information.
?>

奇怪的是方法的结构。直到文件夹 'myfolder' 物理路径存在于 linux 'server' 中,您知道“.../apache/htdocs/myfolder/”,但就是这样。除此之外,代码的物理位置位于不同的文件夹结构中,其中default/mymethod根本不匹配任何文件夹。

通过深入挖掘,我发现mymethod对应的 PHP 方法位于:

apache/htdocs/myfolder/protected/modules/abc/controllers/defaultcontroller.php

在 defaultcontroller.php 里面有这样的东西:

<?php
// ....
Class DefaultController {
    // ....
    Public Function actionmymethod { // Notice the name of mymethod has 'action'
        // more code
        return $response;
    }
}
?>

我 100% 确定在运行请求调用时会触发该方法,但我不知道它是如何完成的。

我的问题是:

这是如何设置的?一定有你相关的地方:

"http://_server/myfolder/abc/default/mymethod" with "actionmethod"

但在哪里以及如何?

我需要制作这个运行的副本,所以我可以用这样的东西来调用我的副本:

"http://_server/FOLDERCOPY/myfolder/abc/default/mymethod" 

我已经复制了新结构,但是调用它时,服务器找不到新方法/路径:(

编辑*** 我在位于 /myfolder/ 的 htaccess 中找到了这个

RewriteEngine on
RewriteBase /myfolder/ 

# if a directory or a file exists, use it directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d 

# otherwise forward it to index.php
RewriteRule . index.php

我修改了 /FOLDERCOPY/myfolder 中的副本,但它似乎不起作用:(

RewriteEngine on
RewriteBase /FOLDERCOPY/myfolder/ 

# if a directory or a file exists, use it directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d 

# otherwise forward it to index.php
RewriteRule . index.php

谢谢

4

1 回答 1

0

并非每个 url 都以 1:1 的比例映射到服务器的文件系统。

显然,里面应该有一个 php 脚本.../apache/htdocs/myfolder/,很可能是一个index.php. 还应该有一些重写规则,可能在一个.htaccess文件中,将 urlhttp://_server/myfolder转换为该脚本,将剩余部分转换为参数( aquery_string或 a path_info)。

从这一点开始,php 接管。该结构意味着存在MVC框架。这个框架似乎支持模块,其中之一是abc,其default控制器的mymethod方法被调用来处理请求。所以url结构是这样的:

http://server/site/module/controller/method?params

.../apache/htdocs/myfolder/在( config.php?)下查找配置文件。它将包含有关模块位置和到控制器的映射(路由)的规则。再说一次,可能有一个全局站点配置,以及每个模块一个......

于 2013-11-07T18:46:43.697 回答