标签: pathinfo

PHP中的PATH_INFO究竟是什么?

所有外部URL看起来都像'module/action?key1 = param1'.无法定制 - 但速度很快.区别在于第一个使用PHP的GET,第二个使用PATH_INFO.

我见过PATH_INFO好几次,但还是不知道到底是什么.它有什么作用?

php pathinfo

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

如果文件名是UTF-8,则使PHP pathinfo()返回正确的文件名

pathinfo()已知为UTF-8的文件名上使用PHP 函数时,除非特殊字符前面有"普通"字符,否则它不会返回正确的值.

示例:
pathinfo('aä.pdf')退货:

Array
(
[dirname] => [the dir]
[basename] => aä.pdf
[extension] => pdf
[filename] => aä
)  
Run Code Online (Sandbox Code Playgroud)

这是好的和花花公子,但pathinfo('äa.pdf')返回:

Array
(
[dirname] => [the dir]
[basename] => a.pdf
[extension] => pdf
[filename] => a
)  
Run Code Online (Sandbox Code Playgroud)

这不是我所期待的.更糟糕的是,pathinfo('ä.pdf')回报:

Array
(
[dirname] => [the dir]
[basename] => .pdf
[extension] => pdf
[filename] => 
)  
Run Code Online (Sandbox Code Playgroud)

为什么这样做?这适用于我测试的所有重音字符.

php utf-8 pathinfo

32
推荐指数
4
解决办法
9677
查看次数

获取PATH_INFO的便携且安全的方法

我正在寻找一种便携式方式来接收(方便)$_SERVER['PATH_INFO']变量.

看了一会儿后,结果发现PATH_INFO是CGI/1.1,而且并不总是出现在所有配置中.

获得该变量的最佳方式(主要是安全方式)是什么 - 除了手动提取它(安全问题).

php pathinfo

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

pathinfo vs fnmatch

关于fnmatch在pathinfo上的速度有一个小小的争论:如何检查文件是否是php?

我并不完全相信所以决定对两个功能进行基准测试.

使用动态和静态路径显示pathinfo更快.

我的基准逻辑和结论是否有效?

编辑:从cmd使用mac php

PHP 5.3.0(cli)(内置:2009年7月20日13:56:33)版权所有(c)1997-2009 PHP Group Zend Engine v2.3.0,版权所有(c)1998-2009 Zend Technologies

动态路径pathinfo 3.2973630428314 fnmatch 3.4520659446716 x1.05

static path pathinfo 0.86487698554993 fnmatch 1.0420439243317 x1.2

来自cmd的mac xampp php

PHP 5.3.1(cli)(内置:2010年2月27日12:41:51)版权所有(c)1997-2009 PHP Group Zend Engine v2.3.0,版权所有(c)1998-2009 Zend Technologies

动态路径pathinfo 3.63922715187 fnmatch 4.99041700363 x1.37

static path pathinfo 1.03110480309 fnmatch 2.38929820061 x2.32

我在我的机器上包含一个结果样本,以秒为单位进行100,000次迭代:

dynamic path
pathinfo 3.79311800003
fnmatch 5.10071492195
x1.34

static path
pathinfo 1.03921294212
fnmatch 2.37709188461
x2.29
Run Code Online (Sandbox Code Playgroud)

码:

<pre>
<?php

$iterations=100000;

// Benchmark with dynamic file path
print("dynamic path\n"); …
Run Code Online (Sandbox Code Playgroud)

php benchmarking pathinfo fnmatch

7
推荐指数
1
解决办法
1254
查看次数

像/index.php/seo_path这样的URI有多可靠

我注意到,有时(特别是在mod_rewrite不可用的地方)使用此路径方案:

http://host/path/index.php/clean_url_here
--------------------------^
Run Code Online (Sandbox Code Playgroud)

似乎是有效的,至少在Apache中,index.php被调用,并且可以/clean_url_here通过查询部分$_SERVER['PATH_INFO'].PHP甚至宣传这个功能.此外,例如,CodeIgniter框架使用此技术作为其URL的默认值.

问题:该技术的可靠性如何?是否存在Apache不调用index.php但尝试解决路径的情况?那么lighttpd,nginx,IIS,AOLServer呢?

一个ServerFault问题?我认为这与在PHP代码中使用此功能有关.所以我问这里.

附录:正如VolkerK所建议的那样,这个问题的合理扩展是:程序员如何影响$_SERVER['PATH_INFO']各种服务器类型的存在?

php url server-configuration pathinfo

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

/ 123和/?123之间有什么区别?

我注意到一些网站(包括旧版http://careers.stackoverflow.com 1.0)的查询字符串如下所示:

http://somewebapp.example/?123

相比于:

http://somewebapp.example/123 要么 http://somewebapp.example/id/123

开发人员选择使用第一个示例而不是第二个和第三个示例来实现其Web应用程序URL的原因是什么?

作为奖励,如果这123是数据库表中某些行的主键,那么如何在PHP中实现第一个示例?(我只需要知道如何123从URL中检索;我已经知道如何在数据库中查询主键123.)

编辑[5/28]:哎呀,忘了让每个人都知道我知道后两个URL是什么,它们如何工作以及如何实现它们.感谢提醒,但我认为我有一些无关紧要的错误观念,无论如何都是偶然澄清的!

php url pathinfo query-string

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

PHP basename()和pathinfo()具有多字节UTF-8文件名

我发现PHP函数basename()以及pathinfo()对于多字节utf-8名称都具有奇怪的行为。它们会删除所有非拉丁字符,直到第一个拉丁字符或标点符号为止。但是,此后,将保留后续的非拉丁字符。

basename("àxà"); // returns "xà", I would expect "àxà" or just "x" instead
pathinfo("àyà/àxà", PATHINFO_BASENAME); // returns "xà", same as above
Run Code Online (Sandbox Code Playgroud)

但奇怪的是pathinfo()的目录名部分工作正常:

pathinfo("àyà/àxà", PATHINFO_DIRNAME); // returns "àyà"
Run Code Online (Sandbox Code Playgroud)

PHP文档警告basename()pathinfo()函数知道区域设置,但这并不能说明pathinfo(..., PATHINFO_BASENAME)和之间的不一致pathinfo(..., PATHINFO_DIRNAME),更不用说根据它们相对于拉丁语的位置,相同的非拉丁语字符将被丢弃还是被接受的事实。字符。

听起来像是一个PHP错误。

由于“基本名称”检查对于避免直接遍历对安全性而言非常重要,因此是否有任何可靠的基本名称过滤器可以很好地与Unicode输入配合使用?

php unicode utf-8 pathinfo

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

如何让IIS6识别pathinfo路由而不是返回"404 Undescribed"错误?

我正在用PHP开发一个RESTful Web应用程序.我得到的是:

  1. 测试服务器上,Windows 7/Apache 2.2/PHP 5.2.9(mod_php)
  2. 生产服务器上,Windows Server 2003/IIS6/PHP 5.2.4(php5isapi.dll)

虽然测试环境没有问题,但生产服务器无法使用pathinfo发送任何RESTful请求(例如/mypath/app.php/controller/id,处理脚本所在的页面/mypath/app.php),并给出一个带有消息的漂亮空白页:

No input file specified. 
Run Code Online (Sandbox Code Playgroud)

使用firebug,我可以看到响应头是:

HTTP/1.1 404 Undescribed
Proxy-Connection: close
Connection: close
Via: 1.1 XXXXX
Date: Thu, 23 Jun 2011 14:51:18 GMT
Content-Type: text/html
Server: Microsoft-IIS/6.0
X-Powered-By: ASP.NET, PHP/5.2.4
Run Code Online (Sandbox Code Playgroud)

XXXXX代理的名称在哪里.

我google了一下,看起来既不是SO也不是网络的其他部分都可以为这个问题提供切实可行的解决方案.任何线索?

由于生产服务器需要跟上,重新安装PHP和/或IIS是不是一种选择.我能做的是修改IIS/PHP配置,然后重新启动IIS.

提前致谢,

保罗

php iis-6 pathinfo restful-url

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

php $SERVER['PATH_INFO'] 和 apache mod_rewrite

这里我有 .htaccess 文件:

Options +FollowSymLinks

RewriteEngine on

RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule .* index.php [QSA,L]
Run Code Online (Sandbox Code Playgroud)

重写可以工作,但当我尝试http://site.com/example时,我的 index.php 中没有 path_info 。

我红色了这个主题/sf/ask/100999811/,但它没有解决我的问题。

所以,这个问题只发生在 apache 1.3 上(在 2.0 上一切正常),我想知道为什么。不幸的是我也无法访问httpd.conf(

请帮我。

php apache mod-rewrite pathinfo

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

像http://localhost/index.php/articles/edit/1/my-first-article这样的URL如何在没有.htaccess的情况下工作?

我不明白这个:

HTTP://localhost/index.php/articles/edit/1/my-first-article

Kohana框架文档中提到了此URL作为示例.我在我的安装文件中捅了一下,除了我自己的那个与之无关的.htaccess之外没有.htaccess.

那么,如何调用index.php然后,作为参数,这些东西看起来像添加到URL的目录?这看起来并不"真实".

或者这只是本机PHP/Apache/HTTP的实际工作原理?据我所知,/总是说"嘿,一个目录!".对我来说真的没有意义......怎么可能?或者他们有一个我无法看到/找到的.htaccess?

php .htaccess kohana pathinfo

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

PHP pathinfo被查询字符串中的url欺骗,任何解决方法?

我正在开发一个小函数来获取一个url并根据它所在的位置返回一个相对路径.

如果url在查询字符串中包含路径,则pathinfo返回不正确的结果.以下代码证明了这一点:

$p = 'http://localhost/demos/image_editor/dir_adjuster.php?u=http://localhost/demos/some/dir/afile.txt';
$my_path_info = pathinfo($p);
echo $p . '<br/><pre>';
print_r($my_path_info);
echo '</pre>';
Run Code Online (Sandbox Code Playgroud)

该代码输出:

http://localhost/demos/image_editor/dir_adjuster.php?u=http://localhost/demos/some/dir/afile.txt

Array
(
    [dirname] => http://localhost/demos/image_editor/dir_adjuster.php?u=http://localhost/demos/some/dir
    [basename] => afile.txt
    [extension] => txt
    [filename] => afile
)
Run Code Online (Sandbox Code Playgroud)

这显然是错的.任何解决方法?

php pathinfo

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

如何让pathinfo()返回正确的扩展名?

$path = 'abc.jpeg';
$info = pathinfo($path,PATHINFO_EXTENSION);
echo $info['extension'];
Run Code Online (Sandbox Code Playgroud)

由于某种原因,这是'j',而不是'jpeg'

在调用pathinfo()之前有什么我应该做的吗?

php pathinfo

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