脚本文件
$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 中任何相对路径的规范化路径?
注意:我看到了一些有关解析符号链接路径的问题。这些问题的答案不适用于我的问题。
因此,最近有人向我的项目提交了一些错误修复,其中还包括:
#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 一起使用的东西吗?
最新版本的PHP具有文件名缓存,用于了解文件的真实路径,require_once()并且include_once()可以利用它。
您可以在php.ini中设置一个值来设置缓存的大小,但是我不知道如何确定大小。默认值为16k,但是我看不出要使用多少缓存。这些文档含糊不清:
确定PHP将使用的realpath缓存的大小。在PHP打开许多文件的系统上,应该增加该值,以反映所执行的文件操作的数量。
是的,我可以增加所允许的缓存数量,并使用ab其他测试来运行测试,但是我想要的是一些自省的功能,而不仅仅是从远处计时。
我有以下代码:
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()实际上是因为我想确保没有添加这样的文件夹,否则我根本不需要切换目录
那么我的方法有什么问题,或者我搞砸了什么?或者是什么?:)
提前致谢!:)
我正在尝试将图像添加到我的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) 使用 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 上,这是应该存储公共文档的文件夹。
有没有办法获得安装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";它,只要文件在同一文件夹中就可以工作,但在我的情况下,文件有时会在不同的文件夹中.
我需要require_once这个文件main.class.php,并functions.php和config.php到admin/test.php.如何找到php需要真正的路径?!
注:main.class.php在class folder,functions.php在includes folder和config.php在root目录test.php中admin folder.
文件目录:
root
/admin/
->test.php
/class/
->main.class.php
/includes/
->functions.php
/templates
config.php
phpinfo.php
Run Code Online (Sandbox Code Playgroud) 我的程序在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) 我对这个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)
为什么第二个失败?
realpath ×10
php ×3
c++ ×2
path ×2
require-once ×2
android ×1
c ×1
chdir ×1
directory ×1
download ×1
itext ×1
java ×1
linux ×1
mingw ×1
optimization ×1
python ×1
root ×1
spring-mvc ×1
visual-c++ ×1
wordpress ×1