基本上,我正在编写一个框架,作为它的一部分功能,它应该为最终开发人员提供一组完善的 URI/路径。
其中一些路径使用了 $_SERVER['DOCUMENT_ROOT']:
/**
* Absolute filesystem path to web root install (aka docroot).
* @example "C:/wamp/www" OR "/home/visitgoz/public_html/"
*/
CFG::set('ABS_WWW',
str_replace(
$tmpseps,
DIRECTORY_SEPARATOR,
truepath($_SERVER['DOCUMENT_ROOT']).'/'
)
);
/**
* K2F path relative to web root.
* @example /K2F/
*/
CFG::set('REL_K2F',
str_replace(
array('//','\\'),
'/',
str_replace(CFG::get('ABS_WWW'),'/',CFG::get('ABS_K2F'))
)
);
代码已经过微调,可以在 Linux 和 Windows 上运行。显然,它大部分时间都在 Linux 上运行,实际上在 VPS 上非常无缝。
然而,最近,我在 HG Reseller Account 上试了一下(共享主机),一切都破裂了。 我已经在有问题的机器上打印出 $_SERVER 中的数据:
Array
(
** [DOCUMENT_ROOT] => /usr/local/apache/htdocs
[GATEWAY_INTERFACE] => CGI/1.1
[HTTP_ACCEPT] => text/html,application/xhtml+xml,application/xml;q=0.9;q=0.8
[HTTP_ACCEPT_CHARSET] => ISO-8859-1,utf-8;q=0.7,*;q=0.7
[HTTP_ACCEPT_ENCODING] => gzip,deflate
[HTTP_ACCEPT_LANGUAGE] => en-gb,en;q=0.5
[HTTP_CONNECTION] => keep-alive
[HTTP_COOKIE] => <snip>
[HTTP_HOST] => <snip>
[HTTP_KEEP_ALIVE] => 115
[HTTP_USER_AGENT] => <snip>
[PATH] => /bin:/usr/bin
[QUERY_STRING] =>
[REDIRECT_STATUS] => 200
[REMOTE_ADDR] => <snip>
[REMOTE_PORT] => 49262
[REQUEST_METHOD] => GET
[REQUEST_URI] => /~sitename/
** [SCRIPT_FILENAME] => /home/sitename/public_html/index.php
[SCRIPT_NAME] => /~sitename/index.php
[SERVER_ADDR] => <snip>
[SERVER_ADMIN] => <snip>
[SERVER_NAME] => <snip>
[SERVER_PORT] => 80
[SERVER_PROTOCOL] => HTTP/1.1
[SERVER_SIGNATURE] =>
Apache mod_fcgid/2.3.5 mod_auth_passthrough/2.1 mod_bwlimited/1.4 FrontPage/5.0.2.2635 Server at <snip> Port 80
[SERVER_SOFTWARE] => Apache mod_fcgid/2.3.5 mod_auth_passthrough/2.1 mod_bwlimited/1.4 FrontPage/5.0.2.2635
[UNIQUE_ID] => TVox-Eo1Z8IAAG1kAh4AAAEZ
[PHP_SELF] => /~sitename/index.php
[REQUEST_TIME] => 1297756668
[argv] => Array
(
)
[argc] => 0
)
还有我的机器:
Array
(
[HTTP_AUTHORIZATION] =>
[HTTP_HOST] => <snip>
[HTTP_USER_AGENT] => <snip>
[HTTP_ACCEPT] => text/html,application/xhtml+xml,application/xml;q=0.9;q=0.8
[HTTP_ACCEPT_LANGUAGE] => en-gb,en;q=0.5
[HTTP_ACCEPT_ENCODING] => gzip,deflate
[HTTP_ACCEPT_CHARSET] => ISO-8859-1,utf-8;q=0.7,*;q=0.7
[HTTP_KEEP_ALIVE] => 115
[HTTP_CONNECTION] => keep-alive
[PATH] => <snip>
[SystemRoot] => C:\Windows
[COMSPEC] => C:\Windows\system32\cmd.exe
[PATHEXT] => .COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC
[WINDIR] => C:\Windows
[SERVER_SIGNATURE] =>
[SERVER_SOFTWARE] => Apache/2.2.11 (Win32) PHP/5.3.1
[SERVER_NAME] => <snip>
[SERVER_ADDR] => <snip>
[SERVER_PORT] => 80
[REMOTE_ADDR] => <snip>
** [DOCUMENT_ROOT] => C:/wamp/www/
[SERVER_ADMIN] => admin@localhost
** [SCRIPT_FILENAME] => C:/wamp/www/K2F/cms/cms-joomla-1.5/index.php
[REMOTE_PORT] => 49947
[GATEWAY_INTERFACE] => CGI/1.1
[SERVER_PROTOCOL] => HTTP/1.1
[REQUEST_METHOD] => GET
[QUERY_STRING] =>
[REQUEST_URI] => /K2F/cms/cms-joomla-1.5/
[SCRIPT_NAME] => /K2F/cms/cms-joomla-1.5/index.php
[PHP_SELF] => /K2F/cms/cms-joomla-1.5/index.php
[REQUEST_TIME] => 1297758541
)
** 你应该读出的部分,应该能完美地解释我的问题。
所以基本上,预期的 DOCUMENT_ROOT 是 /home/sitename/public_html/,但我得到的是 /usr/local/apache/htdocs.
哦,对不起,如果我有点太啰嗦了 ;)
编辑:
getcwd() => /home/visitgoz/public_html
__FILE__ => /home/visitgoz/public_html/K2F/config.php
最佳答案
那些(廉价的)Mass-Hosters 经常使用一些 Apache URL 重写技巧 - 这基本上使他们的生活更轻松,因为只有一个 Apache V-Host,所有共享网站都有一个文档根。
在这种情况下要找到“真正的”文档 Root:
编辑(Christian Sciberras): 这是正确的答案,但它缺少代码,无论如何我都必须编写代码,所以这里是:
if(strpos($_SERVER['SCRIPT_FILENAME'],$_SERVER['DOCUMENT_ROOT'])===false){
// how it works on reseller accounts...
$path=str_common(getcwd(),__FILE__);
}else{
// how it normally works...
$path=truepath($_SERVER['DOCUMENT_ROOT']).'/';
}
关于PHP 奇怪的 DOCUMENT_ROOT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5001326/
我想在共享服务器上建立一个jekyll博客。当我尝试安装Jekyll时,我得到“您没有写权限”。我该如何在没有root或sudo的情况下解决这个问题?更多细节:我在共享服务器上有空间,但没有根访问权限。我无法安装Ruby,尽管托管公司应我的要求安装了它。当我尝试安装Jekyll时我使用user@hosting.org[~]#geminstalljekyll这是我得到的回应:ERROR:Whileexecutinggem...(Gem::FilePermissionError)Youdon'thavewritepermissionsintothe/usr/lib/ruby/gems/1.
有没有人用ruby解决这个问题:假设我们有:a=8.1999999我们想将它四舍五入为2位小数,即8.20,然后乘以1,000,000得到8,200,000我们是这样做的;(a.round(2)*1000000).to_i但是我们得到的是8199999,为什么?奇怪的是,如果我们乘以1000、100000或10000000而不是1000000,我们会得到正确的结果。有人知道为什么吗?我们正在使用ruby1.9.2并尝试使用1.9.3。谢谢! 最佳答案 每当你在计算中得到时髦的数字时使用bigdecimalrequire'bi
我正在尝试找出一种方法来显示来自不在RAILS_ROOT下(在RedHat或Ubuntu环境中)的已安装文件系统的图像。我不想使用符号链接(symboliclink),因为这个应用程序实际上是通过Tomcat部署的,而当我关闭Tomcat时,Tomcat会尝试跟随符号链接(symboliclink)并删除挂载中的所有图像。由于这些文件的数量和大小,将图像放在public/images下也不是一种选择。我查看了send_file,但它只会显示一张图片。我需要在一个格式良好的页面中显示6个请求的图像。由于膨胀,我宁愿不使用Base64编码,但我不知道如何将图像数据与呈现的页面一起传递下去。
defreverse(ary)result=[]forresult[0,0]inaryendresultendassert_equal["baz","bar","foo"],reverse(["foo","bar","baz"])这行得通,我想了解原因。有什么解释吗? 最佳答案 如果我使用each而不是for/in重写它,它看起来像这样:defreverse(ary)result=[]#forresult[0,0]inaryary.eachdo|item|result[0,0]=itemendresultendforainb基本上就
当我写下面的代码时:x=[1,2,3]x我得到这个输出:[1,2,3,[...]][1,2,3,[...]][1,2,3,[...]]我不应该只得到[1,2,3,[1,2,3]]吗?解释是什么? 最佳答案 这没什么奇怪的。数组的第四个元素就是数组本身,所以当你求第四个元素时,你得到的是数组,当你求第四个元素的第四个元素时,你得到的是数组,当你求第四个元素时,你得到的是数组。第四个元素的第四个元素的第四个元素的元素......你得到了数组。就这么简单。唯一有点不寻常的是Array#to_s检测到这样的递归,而不是进入无限循环,而是返回
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭9年前。我来自C、php和bash背景,很容易学习,因为它们都有相同的C结构,我可以将其与我已经知道的联系起来。然后2年前我学了Python并且学得很好,Python对我来说比Ruby更容易学。然后从去年开始,我一直在尝试学习Ruby,然后是Rails,我承认,直到现在我还是学不会,讽刺的是那些打着简单易学的烙印,但是对于我这样一个老练的程序员来说,我只是无法将它
以下测试中的第3个失败:specify{(0.6*2).shouldeql(1.2)}specify{(0.3*3).shouldeql(0.3*3)}specify{(0.3*3).shouldeql(0.9)}#thisonefails这是为什么呢?这是浮点问题还是ruby或rspec问题? 最佳答案 从rspec-2.1开始specify{(0.6*2).shouldbe_within(0.01).of(1.2)}在那之前:specify{(0.6*2).shouldbe_close(1.2,0.01)}
问题总结我想尝试使用Ruby来完成我在Python中所做的事情。在Python中它有r"""syntaxtosupportrawstrings,这很好,因为它允许将原始字符串与代码内联,并以更自然的方式连接它们,而无需特殊缩进。在Ruby中,当使用原始字符串时,必须使用其次是EOT在单独的行中,这会破坏代码布局。你可能会问,为什么不使用Ruby的%q{}?嗯,因为%q{}与Python的r"""相比有局限性因为它不会转义多个\\\并且只处理单个\.我正在动态生成Latex代码并写入一个文件,该文件稍后用pdflatex编译。Latex代码包含类似\\\的内容在许多地方。如果我使用Rub
在为提供json的Rails3.0.3应用构建API时,发生了一些意外行为。以下是Controller。问题是关于respond_with。我已经在应用程序Controller中有respond_to:json。createAction正常运行,创建后数据也被发回。但是更新操作的respond_with不会发回任何数据。响应主体为空白。defcreateline=get_lineinput_header=line.input_headers.create(params[:input_header])respond_with(input_header,:location=>api_v1_
今天我遇到了数组元素赋值的一些奇怪行为:arr=["a","b"]arr2=[1,2]arr.unshift(arr2)#=[[1,2],"a","b"]arr.push(arr2)#=>["a","b",[1,2]]但是,这是有道理的:arr[0,0]=arr2#=>[1,2,"a","b"]我知道在[0,0]中,第一个零是index,第二个是该数组中从index开始的元素数。在我看来它应该与unshift相同,但事实并非如此。谁能解释一下这种行为? 最佳答案 如果我们diveintotherubysourcecode,我们会找到