JavaScript中PHP的dirname(__ FILE__)的等价物?

时间:2012-11-03 05:04:51

标签: php javascript dirname

正如我在标题中已经提到的,我正在寻找一个JS函数来获得与我使用这个PHP代码相同的结果:

dirname(dirname(__FILE__))

提前致谢!

7 个答案:

答案 0 :(得分:6)

我不认为这是可能的,因为php dirname在本地机器上的apache服务器上运行。它可以访问文件系统。但javascript在浏览器层上运行,无法与文件系统一起运行。我想你应该如何使用ajax和proccess结果。我认为这是最好的解决方案。

答案 1 :(得分:1)

我需要一个解决方案来编写这样的代码:

$("#div").load(ROOT_URL + "my/path/to/script.php");

解决方案:PHP脚本生成一个包含所有所需JS文件的JS文件,并将ROOT_URL添加到生成文件的顶部:

$js = 'ROOT_URL = "' . ROOT_URL . '"; ' . $js;
file_put_contents("file.js", $js);

现在我也可以在JS代码中使用ROOT_URL(在PHP配置文件中设置)。我希望我能提供帮助。

答案 2 :(得分:1)

您可以让PHP输出脚本。是的,没错,你可能无法制作php进程js文件(除非你完全控制服务器)。但没关系。只需确保MIME类型正确,在PHP返回的标头和脚本标记中都是如此。这样,您就可以让PHP在脚本中插入您想要的任何值,包括它自己的路径。

在script.php中:

header("Content-type: text/javascript");
echo 'var myvar = '.$something;
//where $something can be $_SERVER['REQUEST_URI'], __FILE__ or whatever you need.
//You could even use information from session variables, or query the database.
//In fact, this way you can have GET parameters in your javascript.
//Make sure you are not creating a vulnerability with the exposed information.

//Then put the rest of the script as usual. You could even include it*.

*:include

在HTML中:

<script type="text/javascript" src="script.php"></script>

是的,我知道我正在重复MIME类型,这样做是为了最大化浏览器兼容性。

答案 3 :(得分:1)

浏览器Javascript中没有__FILE__的类似物;代码无法直接访问加载它的URL。但是在某些假设下你可以弄明白,如答案here

获得脚本的URL后(我假设在下面名为scriptURL的变量中),您可以设置查找祖父级URL。对于URL来说这可能会变得棘手,因此在开始使用字符串修改之前,让Javascript的URL精明部分为您解析URL并获取路径名组件可能是最安全的:

var a = document.createElement('a')
a.href = scriptURL
var scriptPath = a.pathname

然后不幸地归结为字符串操作;这是一个有点笨重的解决方案:

var components = scriptPath.split(/\//)
while (components.length > 0 && !components[components.length-1])
    components.length -= 1;
var twoDirsUp = components.slice(0,components.length-2).join('/')

然后你可以使用反向的锚元素技巧将结果转换回完整的URL:

a.pathname = twoDirsUp;
var grandParentUrl = a.href

答案 4 :(得分:0)

为什么不从绝对网址加载你想要的内容?

如果你的代码块不对:/my/script/to/load.js浏览器会在yoursite.comyoursite.com/a/b/c/d/e/f

之类的内容中加载正确的文件

答案 5 :(得分:0)

有点偏离主题,但是如果你只想获得javascript的dirname($_SERVER['REQUEST_URI'])类似,你可以做到

window.location.href.substr(0, window.location.href.length - window.location.href.split('/').pop().length)

答案 6 :(得分:0)

我使用类似的方法来释放javascript中的路径

 var __DIR__ = window.location.pathname.match('(.*\/).*')[1] + 'NameOfThisFolder';

第一

window.location.pathname.match('(.*\/).*')[1]

返回当前路径,不包含文件名或其他内容。

rootFolder/folder1/folder2/

然后添加此文件夹的名称('NameOfThisFolder')。

通过这种方式,我可以在从ajax请求依次调用的页面的当前页面中进行ajax请求,而无需担心路径