标签: realpath

如何在 PHP 中获取不存在文件的规范化路径(真实路径)?

脚本文件

$filename = realpath(sprintf("%s/%s", getcwd(), $argv[1]));
var_dump($filename);
Run Code Online (Sandbox Code Playgroud)

让我们尝试一些事情

[/foo/bar/bof] $ php script.php ../foo.txt
string(16) "/foo/bar/foo.txt"

[/foo/bar/bof] $ php script.php ../nonexistent.txt
bool(false)
Run Code Online (Sandbox Code Playgroud)

该死!realpath返回 false 因为文件不存在。

我想看到的../nonexistent.txt

string(24) "/foo/bar/nonexistent.txt"
Run Code Online (Sandbox Code Playgroud)

如何获取 PHP 中任何相对路径的规范化路径?

注意:我看到了一些有关解析符号链接路径的问题。这些问题的答案不适用于我的问题。

php path realpath canonicalization

6
推荐指数
1
解决办法
3457
查看次数

这个 realpath 定义的跨平台替代方案?

因此,最近有人向我的项目提交了一些错误修复,其中还包括:

#ifdef _MSC_VER
    #ifndef PATH_MAX
    #define PATH_MAX _MAX_PATH
    #endif
    #define realpath(N,R) _fullpath((R),(N),_MAX_PATH)
#endif
Run Code Online (Sandbox Code Playgroud)

问题是我正在使用 Code::Blocks 和 MinGW,所以当我尝试编译时,它说 realpath() 根本没有定义。提交者没有提供任何替代方案,当我尝试在没有 MSVC 的情况下搜索 realpath 时,我得到的只是使用带有MSVC 的 realpath。有人有可以与 MinGW 一起使用的东西吗?

c++ mingw realpath visual-c++

6
推荐指数
1
解决办法
1867
查看次数

如何调整PHP realpath缓存?

最新版本的PHP具有文件名缓存,用于了解文件的真实路径,require_once()并且include_once()可以利用它。

您可以在php.ini中设置一个值来设置缓存的大小,但是我不知道如何确定大小。默认值为16k,但是我看不出要使用多少缓存。这些文档含糊不清:

确定PHP将使用的realpath缓存的大小。在PHP打开许多文件的系统上,应该增加该值,以反映所执行的文件操作的数量。

是的,我可以增加所允许的缓存数量,并使用ab其他测试来运行测试,但是我想要的是一些自省的功能,而不仅仅是从远处计时。

php optimization realpath require-once

5
推荐指数
1
解决办法
7467
查看次数

python os.path.realpath无法正常工作

我有以下代码:

os.chdir(os.path.dirname(os.path.realpath(__file__)) + "/../test")
path.append(os.getcwd())
os.chdir(os.path.dirname(os.path.realpath(__file__)))
Run Code Online (Sandbox Code Playgroud)

哪个应该添加/../test到python路径,并且它会这样做,并且它在使用PyDev的eclipse之后都可以顺利运行.

但是,当我从控制台第二次os.chdir吃同样的应用程序时,做错了什么,实际上错误的是os.path.realpath(__file__)../test/myFile.py在cus中返回而不是../originalFolder/myFile.py.当然我可以通过使用fixed修复此os.chdir("../originalFolder")问题,但这对我来说似乎有点不对,但这适用于eclipse和console.

PS我os.getcwd()实际上是因为我想确保没有添加这样的文件夹,否则我根本不需要切换目录

那么我的方法有什么问题,或者我搞砸了什么?或者是什么?:)

提前致谢!:)

python path realpath chdir

5
推荐指数
1
解决办法
2万
查看次数

getServletContext().getRealPath()在控制器(NPE)中不起作用,但在jsp中工作

我正在尝试将图像添加到我的pdf文件中.图像位于"WebContent/img/image.png"中.首先,我保存相对路径到字符串,然后我将此相对路径转换为实际路径.

String relativeWebPath = "/img/image.png";
String absoluteDiskPath = getServletContext().getRealPath(relativeWebPath);
Image image1 = Image.getInstance(absoluteDiskPath);
Run Code Online (Sandbox Code Playgroud)

即使这样

String absoluteDiskPath = getServletContext().getRealPath("/");
Run Code Online (Sandbox Code Playgroud)

不起作用.

我在定义相对路径时尝试了一些变化,但无法使它们中的任何一个起作用.当此行String absoluteDiskPath = getServletContext().getRealPath(relativeWebPath);尝试执行时,我总是得到nullPointerException .我是否在相对路径或其他方面做错了什么?我不知道这是否相关,但我使用的是Spring.

@RequestMapping(value = "/exportPhonebook.html", method = RequestMethod.POST)
public void exportPhonebook(Model model, HttpServletResponse response) {
    try {
        setResponseHeaderPDF(response);
        Document document = new Document();
        ByteArrayOutputStream baosPDF = new ByteArrayOutputStream();
        PdfWriter pdfWriter = null;
        pdfWriter = PdfWriter.getInstance(document, baosPDF);
        PageNumbersEventHelper events = new PageNumbersEventHelper();
        pdfWriter.setPageEvent(events);
        document.open();
        addMetaData(document);
        addTitlePage(document);
        String relativeWebPath = "/img/image.png";
        String absoluteDiskPath = getServletContext().getRealPath(relativeWebPath);
        Image …
Run Code Online (Sandbox Code Playgroud)

java spring-mvc relative-path itext realpath

5
推荐指数
1
解决办法
4万
查看次数

Android Q - 如何获取下载文件夹的真实路径

使用 Intent.ACTION_OPEN_DOCUMENT_TREE 我得到这个 uri :

content://com.android.providers.downloads.documents/tree/downloads
Run Code Online (Sandbox Code Playgroud)

如何将其转换为/storage/emulated/0/Download- 真实路径?我不想使用

Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS)

因为已弃用。

编辑:我需要用于下载的公共位置的真实路径,因为在 android Q 上,这是应该存储公共文档的文件夹。

directory android download realpath

5
推荐指数
1
解决办法
3543
查看次数

获取WordPress安装文件夹路径

有没有办法获得安装WordPress的路径?

我使用以下内容:

$root = realpath($_SERVER["DOCUMENT_ROOT"]);
Run Code Online (Sandbox Code Playgroud)

它适用于www.example.com - >/usr/local/pem/vhosts/165312/webspace/httpdocs

这对www.example.com/blog来说并不合适,因为我需要对文件夹名称进行硬编码(博客).

后来我用这个找到了一种方法:

$iroot = getcwd();
$folder = explode("/", $iroot);
$dir = $folder[8]; // I know is 8
$root = realpath($_SERVER["DOCUMENT_ROOT"]);
require "$root/$dir/wp-blog-header.php";
Run Code Online (Sandbox Code Playgroud)

但它仍然是很复杂的东西.是否有一种简单的方法可以在没有硬编码的情况下安装WordPress(路径)?

注意:1个 WordPress函数将无法工作,因为这是以某种方式在WordPress之外.如上一个例子所述,确定WordPress安装路径的重点是require "wp-blog-header.php";多个WordPress安装,其中每个安装使用不同的文件夹(example.com/blog-one和example.com/blog-two),而不是WordPress MU或多站点.

注意:2如果不是require "$root/$dir/wp-blog-header.php";我使用require "wp-blog-header.php";它,只要文件在同一文件夹中就可以工作,但在我的情况下,文件有时会在不同的文件夹中.

wordpress root realpath document-root installation-path

4
推荐指数
2
解决办法
2万
查看次数

PHP找到require_once真实路径

我需要require_once这个文件main.class.php,并functions.phpconfig.phpadmin/test.php.如何找到php需要真正的路径?!

注:main.class.phpclass folder,functions.phpincludes folderconfig.phproot目录test.phpadmin folder.

文件目录:

root
    /admin/
        ->test.php 
    /class/
        ->main.class.php
    /includes/
        ->functions.php
    /templates
    config.php
    phpinfo.php
Run Code Online (Sandbox Code Playgroud)

php realpath require-once

3
推荐指数
1
解决办法
3527
查看次数

为什么realpath()返回错误EEXIST?

我的程序在Linux环境中运行,使用gcc 4.4.7版编译.

我正在使用realpath()"规范化"文件路径.我提供的每个目录和文件的路径realpath()肯定存在,这当然对于realpath()正常工作至关重要.

但是,有时realpath()会失败,错误代码为17,名称EEXIST,字符串描述"文件存在".

那令我困惑.当然它存在,我尖叫realpath().但是realpath()我的咆哮无动于衷.

文档realpath()http://pubs.opengroup.org/onlinepubs/009695399/functions/realpath.html列出了导致失败的错误,但EEXIST不是其中之一.

为什么这样realpath()失败?

导致EEXIST错误的目录和文件路径的示例:

  • 目录的绝对路径: /alpha/bravo/charlie/delta
  • 文件的绝对路径: /alpha/bravo/charlie/foo.txt
  • 文件的相对路径: ../../charlie/foo.txt
  • 文件的路径,其中包含一个额外的点: /alpha/bravo/Charlie/./foo.txt

但这些示例并不是确定的,因为具有完全相同模式的其他文件在同一目录中将会成功.

对于哪个目录或文件将导致EEXIST错误,似乎没有任何押韵或理由.该错误通常仅发生在我尝试规范化的第一个文件路径上,然后不适用于后续文件路径.但是,我不能仅仅通过尝试再次规范化第一个文件来克服它; 错误将继续发生.

程序片段:

#include <string>
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <limits.h>    // for PATH_MAX

using std;

string PathCanonicalize( string const & path )
{
  string result;

  char szResult[ PATH_MAX ];
  ::realpath( path.c_str(), szResult );
  if …
Run Code Online (Sandbox Code Playgroud)

c++ error-handling realpath

3
推荐指数
1
解决办法
726
查看次数

C realpath函数不适用于源文件中定义的字符串

我对这个realpath功能有一个奇怪的问题.当函数被赋予一个接收到的字符串作为程序的参数时,该函数会起作用,但是当给出我在源代码中定义的字符串时,该函数会失败.这是一个简单的程序:

#include <stdlib.h>
#include <limits.h>
#include <stdio.h>

int main(int argc, const char* argv[])
{
    char* fullpath = (char*)malloc(PATH_MAX);
    if(realpath(argv[1], fullpath) == NULL)
    {
        printf("Failed\n");
    }
    else
    {
        printf("%s\n", fullpath);
    }
}
Run Code Online (Sandbox Code Playgroud)

当我使用参数~/Desktop/file(file存在并且是常规文件)运行它时,我得到预期的输出

/home/<username>/Desktop/file
Run Code Online (Sandbox Code Playgroud)

这是该程序的另一个版本:

#include <stdlib.h>
#include <limits.h>
#include <stdio.h>

int main(int argc, const char* argv[])
{

    const char* path = "~/Desktop/file";

    char* fullpath = (char*)malloc(PATH_MAX);
    if(realpath(path, fullpath) == NULL)
    {
        printf("Failed\n");
    }
    else
    {
        printf("%s\n", fullpath);
    }
}
Run Code Online (Sandbox Code Playgroud)

当我运行这个程序时,我得到输出

Failed
Run Code Online (Sandbox Code Playgroud)

为什么第二个失败?

c linux realpath

3
推荐指数
1
解决办法
633
查看次数