mkdir
(PHP 3, PHP 4, PHP 5)
mkdir -- 新建目录
说明
bool mkdir ( string pathname [, int mode] )
尝试新建一个由 pathname 指定的目录。
注意也许你想用八进制数指定模式,也就是说该数应以零打头。模式也会被当前的 umask 修改,可以用 umask() 来改变。
注: Mode 在 Windows 下被忽略。自 PHP 4.2.0 起成为可选项。
默认的 mode 是 0777,意味着最大可能的访问权。有关 mode 的更多信息请阅读 chmod() 页面。
<?php
mkdir ("/path/to/my/dir", 0700);
?>
如果成功则返回 TRUE,失败则返回 FALSE。
参见 rmdir()。
fopen
(PHP 3, PHP 4, PHP 5)
fopen -- 打开文件或者 URL
说明
resource fopen ( string filename, string mode [, int use_include_path [, resource zcontext]] )
fopen() 将 filename 指定的名字资源绑定到一个流上。如果 filename 是 "scheme://..." 的格式,则被当成一个 URL,PHP 将搜索协议处理器(也被称为封装协议)来处理此模式。如果该协议尚未注册封装协议,PHP 将发出一条消息来帮助检查脚本中潜在的问题并将 filename 当成一个普通的文件名继续执行下去。
如果 PHP 认为 filename 指定的是一个本地文件,将尝试在该文件上打开一个流。该文件必须是 PHP 可以访问的,因此需要确认文件访问权限允许该访问。如果激活了 安全模式 或者 open_basedir 则会应用进一步的限制。
如果 PHP 认为 filename 指定的是一个已注册的协议,而该协议被注册为一个网络 URL,PHP 将检查并确认 allow_url_fopen 已被激活。如果关闭了,PHP 将发出一个警告,而 fopen 的调用则失败。
注: 所支持的协议列表见附录 L。某些协议(也被称为 wrappers)支持 context 和 php.ini 选项。参见相应的页面哪些选项可以被设定。(也就是 php.ini 的值 user_agent 用在 http 协议中。)有关 contexts 和 zcontext 参数的说明,参见 参考 CXXI, Stream Functions。
mode 参数指定了所要求到该流的访问类型。可以是以下:
表格 1. fopen() 中的 mode 的可能值列表
mode 说明
'r' 只读方式打开,将文件指针指向文件头。
'r+' 读写方式打开,将文件指针指向文件头。
'w' 写入方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。
'w+' 读写方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。
'a' 写入方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。
'a+' 读写方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。
'x' 创建并以写入方式打开,将文件指针指向文件头。如果文件已存在,则 fopen() 调用失败并返回 FALSE,并生成一条 E_WARNING 级别的错误信息。如果文件不存在则尝试创建之。这和给 底层的 open(2) 系统调用指定 O_EXCL|O_CREAT 标记是等价的。此选项被 PHP 4.3.2 以及以后的版本所支持,仅能用于本地文件。
'x+' 创建并以读写方式打开,将文件指针指向文件头。如果文件已存在,则 fopen() 调用失败并返回 FALSE,并生成一条 E_WARNING 级别的错误信息。如果文件不存在则尝试创建之。这和给 底层的 open(2) 系统调用指定 O_EXCL|O_CREAT 标记是等价的。此选项被 PHP 4.3.2 以及以后的版本所支持,仅能用于本地文件。
注: 不同的操作系统家族具有不同的行结束习惯。当你写入一个文本文件并想插入一个新行时,你需要使用符合你操作系统的行结束符号。基于 Unix 的系统使用 \n 作为行结束字符,基于 Windows 的系统使用 \r\n 作为行结束字符,基于 Macintosh 的系统使用 \r 作为行结束字符。
如果写入文件时使用了错误的行结束符号,则其它应用程序打开这些文件时可能会表现得很怪异。
Windows 下提供了一个文本转换标记('t')可以透明地将 \n 转换为 \r\n。与此对应你还可以使用 'b' 来强制使用二进制模式,这样就不会转换你的数据。要使用这些标记,要么用 'b' 或者用 't' 作为 mode 参数的最后一个字符。
默认的转换模式依赖于 SAPI 和你使用的 PHP 版本,因此为了便于移植鼓励你总是指定恰当的标记。当操作以 \n 作为行结束定界符的纯文本文件时,如果你还期望这些文件可以用于其它应用程序例如 Notepad,则应该在脚本中使用 't' 模式。在所有其它情况下使用 'b'。
在操作二进制文件时如果没有指定 'b' 标记,可能会碰到一些奇怪的问题,包括坏掉的图片文件以及关于 \r\n 字符的奇怪问题。
为移植性考虑,强烈建议在用 fopen() 打开文件时总是使用 'b' 标记。
再一次,为移植性考虑,强烈建议你重写那些依赖于 't' 模式的代码使其使用正确的行结束符并改成 'b' 模式。
自 PHP 4.3.2 起,对所有区别二进制和文本模式的平台默认模式都被设为二进制模式。如果你在升级后脚本碰到问题,尝试暂时使用 't' 标记,直到所有的脚本都照以上所说的改为更具移植性以后。
如果也需要在 include_path 中搜寻文件的话,可以将可选的第三个参数 use_include_path 设为 '1' 或 TRUE。
如果打开失败,本函数返回 FALSE。
例子 1. fopen() 例子
<?php
$handle = fopen ("/home/rasmus/file.txt", "r");
$handle = fopen ("/home/rasmus/file.gif", "wb");
$handle = fopen ("http://www.example.com/", "r");
$handle = fopen ("ftp://user:[email protected]/somefile.txt", "w");
?>
如果在用服务器模块版本的 PHP 时在打开和写入文件上遇到问题,记住要确保所使用的文件是服务器进程所能够访问的。
在 Windows 平台上,要小心转义文件路径中的每个反斜线,或者用斜线。
<?php
$handle = fopen ("c:\\data\\info.txt", "r");
?>
② php 调用include中的函数。结果显示未定义
就你现在程序来看没有数据提交,是会报错的,你可以:
accept.php
<?php
include_once('include/init.php');//如果init.php文件在include文件下就是对的,如果是和你当前文件在一个文件夹下,就用include_once("init.php")
if($_POST==""){
die("没有可用数据!");//首先判断接收到数据是否为空
}
$year=check($_POST['year']);
$month=check($_POST['month']);
$player=check($_POST['playername']);
$arr=array($year,$month,$player);
var_mp($arr);
?>
我觉得你原来var_mp($_POST)没什么大作用,应该不是你想要的结果,所以我帮你改了下,另外你还应该做个表单,将year,month,playernaem定义好,这样测试才有效果。
(Mekbo【麦客博】)
③ php 使用file_get_contents读取大文件的方法
当我们遇到文本文件体积很大时,比如超过几十M甚至几百M几G的大文件,用记事本或者其它编辑器打开往往不能成功,因为他们都需要把文件内容全部放到内存里面,这时就会发生内存溢出而打开错误,遇到这种情况我们可以使用PHP的文件读取函数file_get_contents()进行分段读取。
函数说明
string
file_get_contents
(
string
$filename
[,
bool
$use_include_path
[,
resource
$context
[,
int
$offset
[,
int
$maxlen
]]]]
)
和
file()
一样,只除了
file_get_contents()
把文件读入一个字符串。将在参数
offset
所指定的位置开始读取长度为
maxlen
的内容。如果失败,file_get_contents()
将返回
FALSE。
file_get_contents()
函数是用来将文件的内容读入到一个字符串中的首选方法。如果操作系统支持还会使用内存映射技术来增强性能。
应用:
复制代码
代码如下:
$str
=
$content=file_get_contents("2.sql",FALSE,NULL,1024*1024,1024);
echo
$str;
如果针对较小文件只是希望分段读取并以此读完可以使用fread()函数
复制代码
代码如下:
$fp=fopen('2.sql','r');
while
(!feof($fp)){
$str.=fread($fp,
filesize
($filename)/10);//每次读出文件10分之1
//进行处理
}
echo
$str;
④ php的fopen()函数的use_include_path参数怎么理解
需要指定的目录列表,包括fopen(),file(),readfile()和file_get_contents()函数寻找文件。格式就像系统的PATH环境变量:用冒号隔开的目录列表在Unix或Windows的分号。
PHP认为包括路径中的每个条目分别包括在寻找文件。它将检查第一个路径,如果它没有找到它,检查下一个路径,直到定位包含文件或返回警告或错误。你可以在运行时修改或设置包括路径使用set_include_path()。
示例# 1 Unix包含路径
include_path=".:/php/includes
示例# 2窗口包含路径
include_path=".;c:\php\includes"
使用一个。在包括路径允许相对包括,因为这意味着当前目录。然而,它显式地使用包括“更为有效。比在PHP /文件总是检查每个包含当前目录。
⑤ PHP文件中include函数包含一个有常量的文件,然后echo发生错误
includde写错了吧,应该是include。如果路径正确,不会有错误。再仔细测试下。常量不用加$,并且不一定要大写。
Notice 你这个是 PHP 的提示而非报错,PHP 本身不需要事先声明变量即可直接使用,但是对未声明变量会有提示。而这个可以设置的。在php.ini里,设置error_reporting即可。
⑥ thinkphp 怎么引用文件
THINKPHP引入PHP文件和原生的是一样的,没有区别! 因为TP是基于PHP上的一个框架。
目前有两种方法,一种是include和require,还有一种是include_once和require_once。根据不同的场合使用不同的代码。前面一种是局部引入,如果不存在会提示但不会终止;后面一种引入是将被引入界面认为是现有页面的一个整体,如果不存在会终止程序并报错。
具体参考代码如下,include类同,具体参考上方区别:
require './path/file_name.php'; //可以执行多次,例如某个模块
require_once './path/file_name.php'; //只包含一次,一般为通用函数等
在thinkPHP中模板和css是这样的输出和引用的:
首先说模板要放在与模板对应的文件夹中,然后css和js等外部引用的文件要在你模板目录下新建一个名叫public的文件夹,css和js文件就是放在这个文件夹中的。
注意此时要更改模板(htnl文件)中的引用地址的代码,例如:
原来你引用css文件是这样引用的:
<link rel="stylesheet" href="./Css/index.css" />
但是在thinkPHP中你要改成:
<link rel="stylesheet" href="__public__/Css/index.css" />
__public__的意思访问当前目录下的public 文件夹,thinkPHP就会访问public文件夹。
⑦ php 中 fopen()打开文件(Url)失败是什么原因
需要在php.ini中将相关配置开启
fopen原型:
resourcefopen(string$filename,string$mode[,bool$use_include_path=false[,resource$context]])
如果PHP认为filename指定的是一个已注册的协议,而该协议被注册为一个网络URL,PHP将检查并确认allow_url_fopen已被激活。如果关闭了,PHP将发出一个警告,而fopen的调用则失败。
allow_url_fopen:本选项激活了URL形式的fopen封装协议使得可以访问URL对象例如文件。默认的封装协议提供用ftp和http协议来访问远程文件,一些扩展库例如zlib可能会注册更多的封装协议。
注意:
出于安全性考虑,此选项只能在php.ini中设置。
此选项是紧接着版本4.0.3发布后引进的。版本4.0.3以及之前的版本只能在编译时通过配置项--disable-url-fopen-wrapper来取消此特性。
⑧ php写文件 路径的格式
可以直接使用绝对路径。
如果是Windows可以直接写“C:/Cache/”
如果是Linux可以直接写“/Cache/”,需先改cache的权限为777.看看报什么错。在PHP的最前面加上error_reporting(E_ALL & ~E_NOTICE);相对路径是相对fopen所在的PHP文件即a.php而言的。
$f = fopen("cache/$filename", 'ab);
如果a.php在根目录下的b文件夹:
$f = fopen("../cache/$filename", 'ab);
⑨ PHP有没`新建文件的代码`不是`新建文件夹`!
fopen
(PHP 3, PHP 4 , PHP 5)
fopen -- 打开文件或者 URL
说明
resource fopen ( string filename, string mode [, int use_include_path [, resource zcontext]])
fopen() 将 filename 指定的名字资源绑定到一个流上。如果 filename 是 "scheme://..." 的格式,则被当成一个 URL,PHP 将搜索协议处理器(也被称为封装协议)来处理此模式。如果该协议尚未注册封装协议,PHP 将发出一条消息来帮助检查脚本中潜在的问题并将 filename 当成一个普通的文件名继续执行下去。
如果 PHP 认为 filename 指定的是一个本地文件,将尝试在该文件上打开一个流。该文件必须是 PHP 可以访问的,因此需要确认文件访问权限允许该访问。如果激活了 安全模式 或者 open_basedir 则会应用进一步的限制。
如果 PHP 认为 filename 指定的是一个已注册的协议,而该协议被注册为一个网络 URL,PHP 将检查并确认 allow_url_fopen 已被激活。如果关闭了,PHP 将发出一个警告,而 fopen 的调用则失败。
注: 所支持的协议列表见附录 L。某些协议(也被称为 wrappers)支持 context 和 php.ini 选项。参见相应的页面哪些选项可以被设定。(也就是 php.ini 的值 user_agent 用在 http 协议中。)有关 contexts 和 zcontext 参数的说明,参见 参考 CXII, Stream Functions。
mode 参数指定了所要求到该流的访问类型。可以是以下:
……
完整的看参考资料。
⑩ 使用PHP程序检查PHP文件是否有语法错误
在网上找了一下。刚开始以为 token_get_all()函数能处理语法错误的问题,结果发现,它只是做简单的词法分析。没有办法。后来到论坛上去问了一下
之前在当当的时候的一个项目中用到了一个简单的模板引擎,其实也是借鉴discuz来做的模板引擎,很简单,它所作的事情就是把一些自定义的标签编译成php代码。已经说了很简单了,所以编译的时候也名优进行模板语法的检查,那么在开发过程中就会出现编译出来的php文件有语法问题,有语法问题没有关系,我修改重新编译一下就好了。首先不能在每次请求的时候都把php模板重新编译一下,会严重影响性能,折中的处理时在每个编译好的php文件末尾检查一下该模板文件是否已经修改过,根据设定的更新频率,如果又需要则重新编译模板文件,现在的问题是编译出来的php文件自己有语法错误,根本执行不到模板检查那一步,所以即使修改了模板文件中的问题也不会重新编译。 所以我想寻找一种简单的方法来检查生成的php文件是否合法。不合法就重新编译,这样开发过程中就不用出现错误就得手动删除缓存文件了。
在网上找了一下。刚开始以为 token_get_all()函数能处理语法错误的问题,结果发现,它只是做简单的词法分析。没有办法。后来到论坛上去问了一下
有人告诉我有这样一个函数 php_check_syntax() 我想问题就这么坚决了。。我真应该rtf(read the fuck mannual). 仔细一看。这个函数已近被弃用了:
note: for technical reasons, this function is deprecated and removed from php. instead, use php -l somefile.php from the commandline.
这个technical reason 到底是什么呢? 先不管了,以后再慢慢研究,反正不能使用这个方法就对了。
他们的建议是使用命令行$php -l filename.php 来检查语法。
gary every给了我一个代码片段参考:
在命令行下检查问题也不大。如果我要放在在线应用呢? 这就涉及到可移植性的问题了。首先是操作系统,然后就是环境变量。这样的话就会依赖于服务器端的配置。在http://www.php.net/manual/en/function.php-check-syntax.php 上有人贴出了自己的php_check_syntax()函数实现。
有的采用的就是上面的命令行的方法。
后面有提到使用eval的方法来验证。eval方法会执行传入的代码, 如果代码有语法错误则会抛出parser error, 可以使用'@'错误抑制符去掉错误信息,eval和echo一样并不是函数,不能使用变量函数的方法调用比如:
$func = ‘eval'
$func()这样的调用就是无效的。它会提示没有eval函数,如果你自己定义这么一个函数也是有问题的。因为eval是一个关键字。
eval调用和include差不多,如果被包含文件中没有明确return就返回null。如果直接eval我们需要检查的文件会造成被检查的文件内代码被执行,这可不是我们想要的,我们只需要检查一下这个文件的语法是否正确。 我们可以在要检查的文件之前添加return 语句,让代码提前跳出,那么后面的代码就不会执行了。好的,就这么干。
checker.php
if(!function_exists('php_check_syntax')) {
function php_check_syntax($file_name, &$error_message = null) {
$file_content = file_get_contents($file_name);
$check_code = "return true; ?>";
$file_content = $check_code . $file_content . "<?php ";
if(!@eval($file_content)) {
$error_message = "file: " . realpath($file_name) . " have syntax error";
return false;
}
return true;
}
}
if(!php_check_syntax("file.php", $msg)) {
echo $msg;
}
else {
echo "woohoo, ok!";
}
file.php
<?php
foreach:: a => b
?>
因为parse error 是没法被 set_error_handler处理函数处理的。这个异常没办法catch到。所以才使用了@来抑制错误。这带来的问题就是我们无法得到详细的错误信息。 不过目前我需要的功能也只是检查语法是否正确。不正确的话重新编译模板文件,就这么简单,至于语法错误,在显示网页的时候自然会看得到。