2012-04-12 286 views
1

如何获取绝对文件路径php获取绝对文件路径

我有一个文件夹abc和xyz。

我包括XYZ文件夹中使用Ajax请求给予这就好比是相对路径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); 
     } 
    }); 
}); 
+4

更多代码..moaaaar! (因为说你使用ajax包含.php文件,我发现这是奇怪的) – Adi 2012-04-12 11:44:29

+1

包括或请求? – 2012-04-12 11:51:12

回答

1

在Ajax请求我已经改变URL这样

url: location.protocol + "//" + location.host + "projectname/foldername/filename.php" 

然后,它的工作完美

1

首先,如果你想在xyz文件从abc,你需要做的../abc/a.php,不../a.php(除非,当然,该文件是在同一级别作为你的两个目录)。

其次,将相对路径转换为绝对的函数被称为realpath,您可以找到文档here

如果你的目录结构是这样的:

abc/ 
xyz/ 
a.php 

...那么得到的a.php从位于您的目录中的一个文件的绝对路径,你会做

$absolute = realpath('../a.php'); 
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

例如,你在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'];?> 

目前唯一的文件URL(如:mysite.com/myfile.php)

<?php echo $_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF']; ?> 

当前URL完全(如:mysite.com/myfile.php?action=blabla

<?php echo $_SERVER['HTTP_HOST'].$_SERVER["REQUEST_URI"];?> 

为了得到真实路径的文件(即使它包含)(更改的/ 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。