Phi*_*ord 10 php url command-line
不确定标题是否正确,如果你想到一个更好的标题,请编辑.
我有一个XMLRPC服务,我从命令行调用.它使用Zend框架.
客户端看起来像这样:
$ server = new Zend_XmlRpc_Client('http://hostname/path/to/xmlrpc.server.php');
该文件位于:
/var/www/html/path/to/xmlrpc.server.php
Run Code Online (Sandbox Code Playgroud)
我现在对它进行了硬编码,但希望通常填充'path/to /'.
我试过了:
function url(){
$protocol = $_SERVER['HTTPS'] ? "https" : "http";
return $protocol . "://" . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
}
echo url();
Run Code Online (Sandbox Code Playgroud)
注意:$ _SERVER选项都没有返回我需要的内容
但是从命令行执行此操作会给我:
http://
Run Code Online (Sandbox Code Playgroud)
也getcwd()给我:
/var/www/html/path/to
Run Code Online (Sandbox Code Playgroud)
我怎样才能得到:
http://path/to
Run Code Online (Sandbox Code Playgroud)
有什么想法吗?
我想这样做的原因是如果项目需要更改它应该自动配置的目录.例:
如果我在这里移动项目:
/var/www/html/path/to/another/location
Run Code Online (Sandbox Code Playgroud)
或者在这里:
/var/www/public_html/path/to/another/location
Run Code Online (Sandbox Code Playgroud)
甚至在这里:
/path/to/document/root/path/to/another/location
Run Code Online (Sandbox Code Playgroud)
我应该得到:
http://hostname/path/to/another/location
Run Code Online (Sandbox Code Playgroud)
谢谢你的帮助
更新:
我尝试了这个,但仍未按预期工作:
$hostname = `hostname`;
echo 'http://'.trim($hostname).'/'.basename(getcwd())."\n";
Run Code Online (Sandbox Code Playgroud)
Hen*_*pel 15
简单回答:你做不到.
正如NikiC在他对你的问题的评论中已经说过的那样,从命令行调用脚本意味着没有可用的Web服务器上下文的概念."主机名"和"文档根"的概念仅存在于Web服务器上下文中,并且基于服务器的配置.您的/var/www/something目录中没有任何内容表示"嘿,我是文档根".
为了说明,假设您使用两个文档根配置了两个vhost:
/var/www/top-docroot/var/www/top-docroot/nested-docroot.您的脚本位于:
/var/www/top-docroot/nested-docroot/path/to/xmlrpc.server.php
从命令行调用时,您的脚本应该使用什么路径?
nested-docroot/path/to/xmlrpc.server.phppath/to/xmlrpc.server.php虽然这是一个非常人为的例子,但它仍然应该证明文档根目录只能在Web服务器请求的上下文中可靠地确定,因为它是从配置中读取的.
因此,当从命令行调用时,您的所有脚本都可以尝试从Web服务器配置(也没有可靠的地方)获取信息,或者使用一些启发式方法,例如假设文档根的通用约定居住在/var/www.这两种方法都非常不可靠,您可能更善于坚持使用硬编码值(或将信息作为参数传递给调用).
| 归档时间: |
|
| 查看次数: |
10139 次 |
| 最近记录: |