tl;dr:如何让 PHP 从当前文件的角度解释 include/require 语句中的相对路径?
这是关于 PHP 中关于相对路径的旧问题的另一个问题。请耐心等待,因为我找不到任何解决方案来解决我特别想做的事情。
考虑以下目录树和文件:
[www]:
index.php
config.php
[webroot]:
home.php
index.php 需要 home.php,在 webroot 中找到:
require('webroot/home.php');
home.php 需要 config.php,在父目录中找到:
require('../config.php');
我的问题是这在我的本地开发环境 (Ubuntu 14.04 LTS/15.10) 中不起作用,但它在生产环境中运行完美。每个提到的环境都运行 Apache 2 和 PHP 5。
奇怪的是,当我在我的 Vagrant VM(Ubuntu 12.04 LTS)中运行它时,它确实在本地运行,从主机访问它。但是,现在我无法在此处运行虚拟机。
那么,为什么这些环境的行为如此不同?
这让我相信必须有一种方法来改变 PHP 解释相对路径的方式。我目前正在处理一个 6GB 以上的 PHP 项目,它的编写方式与上面的示例类似,我真的需要避免重写每个 include/require 语句(使用 dirname(__FILE__) 左右),以及这可能导致的 git merge 冲突。
编辑:我刚刚记得我实际上已经在这里问过这个问题:PHP: include inside included file
最佳答案
像这样用来解析相对URL的路径是由the include_path configuration option配置的它有一个在运行时设置它的专用函数:set_include_path .
请注意,要搜索的路径集可能包括.,表示“当前工作目录”,可以用chdir 设置。并阅读 getcwd .您可能还需要更改此设置,使 ./foo.php 和 ../foo.php 等显式相对路径起作用。
(我本来建议您改用 __DIR__ 或 $_SERVER['DOCUMENT_ROOT'],但您提到您不想重写现有代码。我仍然会建议任何其他阅读本文的人在每个包含路径相关的地方明确说明,以避免奇怪的错误和动态基础的潜在安全漏洞。)
关于PHP 相对路径 : can I configure it?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34272966/
如何使此根路径转到:“/dashboard”而不仅仅是http://example.com?root:to=>'dashboard#index',:constraints=>lambda{|req|!req.session[:user_id].blank?} 最佳答案 您可以通过以下方式实现:root:to=>redirect('/dashboard')match'/dashboard',:to=>"dashboard#index",:constraints=>lambda{|req|!req.session[:user_id].b
我需要根据字符串路径的长度将字符串路径数组转换为符号、哈希和数组的数组给定以下数组:array=["info","services","about/company","about/history/part1","about/history/part2"]我想生成以下输出,对不同级别进行分组,根据级别的结构混合使用符号和对象。产生以下输出:[:info,:services,about:[:company,history:[:part1,:part2]]]#altsyntax[:info,:services,{:about=>[:company,{:history=>[:part1,:pa
Organization和Image具有一对一的关系。Image有一个名为filename的列,它存储文件的路径。我在Assets管道中包含这样一个文件:app/assets/other/image.jpg。播种时如何包含此文件的路径?我已经在我的种子文件中尝试过:@organization=...@organization.image.create!(filename:File.open('app/assets/other/image.jpg'))#Ialsotried:#@organization.image.create!(filename:'app/assets/other/i
我在Ruby程序中有两个URI。一个肯定是绝对URI,另一个可能是绝对URI或相对URI。我想在第一个的上下文中将第二个转换为绝对URI,所以如果第一个是http://pupeno.com/blog第二个是/about,结果应该是http://pupeno.com/about.有什么想法吗? 最佳答案 Ruby的内置URI和Addressablegem,做这个简短的工作。我更喜欢Addressable,因为它功能更全面,但URI是内置的。require'uri'URI.join('http://pupeno.com/blog','/
我安装了ruby、yeoman,当我运行我的项目时,出现了这个错误:Warning:Running"compass:dist"(compass)taskWarning:YouneedtohaveRubyandCompassinstalledthistasktowork.Moreinfo:https://github.com/gruUse--forcetocontinue.Use--forcetocontinue.我有进入可变session目标的路径,但它不起作用。谁能帮帮我? 最佳答案 我必须运行这个:geminstallcom
是否有内置的Ruby方法或众所周知的库可以返回对象的整个方法查找链?Ruby查看一系列令人困惑的类(如thisquestion中所讨论)以查找与消息对应的实例方法,如果没有类响应消息,则调用接收方的method_missing。我将以下代码放在一起,但我确信它遗漏了某些情况或者它是否100%正确。请指出任何缺陷并指导我找到一些更好的代码(如果存在)。defmethod_lookup_chain(obj,result=[obj.singleton_class])ifobj.instance_of?Classreturnadd_modules(result)ifresult.last==B
我正在寻找这样解析路由路径的方法:ActionController::Routing.new("post_path").parse#=>{:controller=>"posts",:action=>"index"}应该和url_for相反更新我发现:Whatistheoppositeofurl_forinRails?Afunctionthattakesapathandgeneratestheinterpretedroute?ActionController::Routing::Routes.recognize_path("/posts")所以现在我需要将posts_path转换为“/p
一:os.path.dirname(__file__)和os.getcwd()importospath=os.path.dirname(__file__)print("os.path.dirname(__file__)方法的结果{}".format(path))path=os.getcwd()print("os.getcwd()方法的结果{}".format(path))该脚本路径为:/User/xxx/Work1.在当前目录/User/xxx/Work运行程序结果:2.在上一级目录/User/xxx运行程序:3.在其他目录/User/xxx/Work/python运行程序:\在其他目录/Us
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭9年前。我来自C、php和bash背景,很容易学习,因为它们都有相同的C结构,我可以将其与我已经知道的联系起来。然后2年前我学了Python并且学得很好,Python对我来说比Ruby更容易学。然后从去年开始,我一直在尝试学习Ruby,然后是Rails,我承认,直到现在我还是学不会,讽刺的是那些打着简单易学的烙印,但是对于我这样一个老练的程序员来说,我只是无法将它
Paperclip的文档提到,您可以通过将以下代码放在test.rb环境文件中来更改测试的上传路径:Paperclip::Attachment.default_options[:path]="#{Rails.root}/spec/test_files/:class/:id_partition/:style.:extension"我遇到的问题是附件在模型中设置了路径,不会被覆盖:has_attached_file:photo,path:':attachment/:id/:style.:extension'当我运行测试时,文件会上传到/photo/文件夹而不是/spec/test_file