如何获取绝对文件路径php
我有一个文件夹abc和xyz。
我使用Ajax请求在xyz文件夹中包含abc文件a.php,给出相对路径,如:
../a.php
文件a.php包含一些使用Ajax请求完成的操作。
在xyz文件夹中我想执行在abc文件夹中执行的相同操作,但是当我尝试执行这些操作时,它正在xyz文件夹而不是abc中搜索文件,所以我想在xyz中执行的操作是不工作。
请帮我解决这个问题。
更新的代码:
$(function(){
$.ajax({
type:"POST",
url: "../xyz/a.php",
data: {
"Id": '<?php echo $_GET['Id'];?>'
},
success: function(data){
$("#divId").html(data);
}
});
});
答案 0 :(得分:3)
我建议你在config / index / bootstrap中执行类似的操作:
define('ROOT_DIRECTORY', dirname(__FILE__).'/');
这样,当您需要从其他位置加载文件时,您可以创建相对于ROOT_DIRECTORY的所有路径。例如:
require_once(ROOT_DIRECTORY . 'abc/xyz.php');
这将使文件包含更简单,并允许您将整个项目目录移动到另一个位置(例如生产服务器),而不会破坏任何“路径”逻辑。
看到你的代码更新,我看到你真的在谈论来自javascript的请求..在这种情况下,只需将完整的url留给文件:url:'http://server.com/xyx/abc。 PHP“
干杯
答案 1 :(得分:2)
例如,您在 http://your-site.com/folder1/folder2/file.php 。
这里是php变量:
==============================================================================
======I======
__File__; C:\wamp\www\folder1\folder2\file.php
$_SERVER['PHP_SELF']; /folder1/folder2/file.php
//$_SERVER['PHP_SELF'] is the same as $_SERVER["REQUEST_URI"];
======II======
getcwd(); C:\wamp\www\folder1\folder2\
dirname(); OUTPUTS NOTHING - EMPTY NOT ALLOWED
basename(); OUTPUTS NOTHING - EMPTY NOT ALLOWED
__dir__; C:\wamp\www\folder1\folder2
======III======
getcwd( XXX ); OUTPUTS NOTHING - PARAMETER NOT ALLOWED
getcwd( XXX ); OUTPUTS NOTHING - PARAMETER NOT ALLOWED
getcwd( XXX ); OUTPUTS NOTHING - PARAMETER NOT ALLOWED
dirname(__FILE__); C:\wamp\www\folder1\folder2
dirname($_SERVER['PHP_SELF']); /folder1/folder2
dirname(getcwd()); C:\wamp\www\folder1
dirname(dirname()); OUTPUTS NOTHING - EMPTY NOT ALLOWED
dirname(basename()); OUTPUTS NOTHING - EMPTY NOT ALLOWED
basename(__FILE__); file.php
basename($_SERVER['PHP_SELF']); file.php
basename(getcwd()); folder2
basename(dirname()); OUTPUTS NOTHING - EMPTY NOT ALLOWED
basename(basename()); OUTPUTS NOTHING - EMPTY NOT ALLOWED
======IV======
on dirname
dirname(dirname(__FILE__)); C:\wamp\www\folder1
dirname(dirname($_SERVER['PHP_SELF'])); /folder1
dirname(dirname(getcwd())); C:\wamp\www
basename(dirname(__FILE__)); folder2
basename(dirname($_SERVER['PHP_SELF'])); folder2
basename(dirname(getcwd())); folder1;
on basename
dirname(basename(__FILE__)); .
dirname(basename($_SERVER['PHP_SELF'])); .
dirname(basename(getcwd())); .
basename(basename(__FILE__)); file.php
basename(basename($_SERVER['PHP_SELF'])); file.php
basename(basename(getcwd())); folder2
==============================================================================
============实施例===========
主页
<?php echo $_SERVER['HTTP_HOST'];?>
仅限当前FILE网址(如:mysite.com/myfile.php)
<?php echo $_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF']; ?>
当前网址完全(例如:mysite.com/myfile.php?action=blabla
<?php echo $_SERVER['HTTP_HOST'].$_SERVER["REQUEST_URI"];?>
获取RealPath到文件(即使包含它)(将/ var / public_html更改为所需的根目录)
<?php
// First step: Get full path
$cur_file=str_replace('\\','/',__FILE__);
// Second step: Remove the root path
$cur_file=preg_replace('/(.*?)\/var\/public_html/','',$cur_file);
?>
对于wordpress,已经有预定义的函数来获取插件或主题url。
答案 2 :(得分:1)
首先,如果您要在xyz
abc
中添加文件,则需要执行../abc/a.php
,而不是../a.php
(当然,除非文件是在与两个目录相同的级别上。)
其次,将相对路径转换为绝对路径的函数称为realpath
,您可以找到文档here。
如果您的目录结构是这样的:
abc/
xyz/
a.php
...然后从你位于你的某个目录中的文件中获取a.php
的绝对路径,你会这样做
$absolute = realpath('../a.php');
答案 3 :(得分:1)
在Ajax请求中,我已经像这样更改了网址
url: location.protocol + "//" + location.host + "projectname/foldername/filename.php"
然后它完美地运作