当前位置: 编程技术>php
本页文章导读:
▪PHP正则的Unknown Modifier错误解决方法
如下正则:
$a='2<span><nobr>tóng<span >dòng</span></nobr><br>垌</span>3'; echo preg_replace('/<span >[^<]*?</span>/','',$a);
会提示:
Warning: preg_replace(): Unknown modifier.........
▪php is_file()和is_dir()用于遍历目录时用法注意事项
1、目录inc有以下内容: 子目录 0 子目录 a footer.html header.html login_function.inc.php mysqli_connect.php style.css 2、现在PHP要遍历inc目录,并只显示文件,不显示目录0和a,代码如下: 代码如下: $dir = $_.........
▪php 读取shell管道传输过来的内容
暮夏,您好! rainbird给您发了短消息: 已经写了不少后台运行的deamon了.用的挺顺手的,但是我现在想获取管道传过来的内容,不知道咋实现,类似echo "aaaa" |a.php,a.php怎么获得echo的内容,不知道.........
[1]PHP正则的Unknown Modifier错误解决方法
来源: 互联网 发布时间: 2013-11-30
如下正则:
$a='2<span><nobr>tóng<span >dòng</span></nobr><br>垌</span>3';echo preg_replace('/<span >[^<]*?</span>/','',$a);
会提示:
Warning: preg_replace(): Unknown modifier 'p' in E:\phpLearn\test.php on line 12原因是:
在正则模式中,用/做定界符,但正则中也含有/,因此会出现此错误,PHP误当后面的一个</span>中的斜杠是结束的定界符。
解决办法:
1、加一个转义符:
echo preg_replace('/<span >[^<]*?<\/span>/','',$a);2、改其它定界符:如
echo preg_replace('{<span >[^<]*?</span>}','',$a);
[2]php is_file()和is_dir()用于遍历目录时用法注意事项
来源: 互联网 发布时间: 2013-11-30
1、目录inc有以下内容:
子目录 0
子目录 a
footer.html
header.html
login_function.inc.php
mysqli_connect.php
style.css
2、现在PHP要遍历inc目录,并只显示文件,不显示目录0和a,代码如下:
$dir = $_SERVER['DOCUMENT_ROOT'];
$dir = "$dir/inc/";
$d = opendir($dir);
while(false !==($f=readdir($d)))
{
if(is_file($f)){
echo " <h2>$f </h2>";
}else{
echo " <h2>是目录$f </h2>";
}
}
closedir($d);
结果却只显示了“footer.html”是文件,其它都变成目录了:
是目录.
是目录..
是目录a
footer.html
是目录header.html
是目录login_function.inc.php
是目录mysqli_connect.php
是目录style.css
这是由于不能在is_file和is_dir中直接使用“$f”,这样会被PHP当作是根目录下的该文件,而在我的根目录下有footer.html这个文件,所以会正确显示这个文件。其它则不行。代码改成:
要正确显示,需要改造代码:
while(false !== ($f=readdir($d)))
{
if(is_file("$dir/$f")){
echo "<h2>$f</h2>";
}else{
echo "<h2>是目录$f</h2>";
}
}
closedir($d);
子目录 0
子目录 a
footer.html
header.html
login_function.inc.php
mysqli_connect.php
style.css
2、现在PHP要遍历inc目录,并只显示文件,不显示目录0和a,代码如下:
代码如下:
$dir = $_SERVER['DOCUMENT_ROOT'];
$dir = "$dir/inc/";
$d = opendir($dir);
while(false !==($f=readdir($d)))
{
if(is_file($f)){
echo " <h2>$f </h2>";
}else{
echo " <h2>是目录$f </h2>";
}
}
closedir($d);
结果却只显示了“footer.html”是文件,其它都变成目录了:
是目录.
是目录..
是目录a
footer.html
是目录header.html
是目录login_function.inc.php
是目录mysqli_connect.php
是目录style.css
这是由于不能在is_file和is_dir中直接使用“$f”,这样会被PHP当作是根目录下的该文件,而在我的根目录下有footer.html这个文件,所以会正确显示这个文件。其它则不行。代码改成:
要正确显示,需要改造代码:
代码如下:
while(false !== ($f=readdir($d)))
{
if(is_file("$dir/$f")){
echo "<h2>$f</h2>";
}else{
echo "<h2>是目录$f</h2>";
}
}
closedir($d);
[3]php 读取shell管道传输过来的内容
来源: 互联网 发布时间: 2013-11-30
暮夏,您好!
rainbird给您发了短消息:
已经写了不少后台运行的deamon了.用的挺顺手的,但是我现在想获取管道传过来的内容,不知道咋实现,类似echo "aaaa" |a.php,a.php怎么获得echo的内容,不知道您有什么高见.
今天收到一条消息,解决的方法给大家分享一下:
实际上,shell 的 | 实际上表示的是 前一个的 标准输出 作为后一个的标准输入。虽然实现是通过pipe来实现的,
但是你写php代码的时候不需要知道底层的运作。你直接作为标准输入读取就可以了:
下面是一个实验代码:
<?php
$fp = fopen("php://stdin", "r");
$s = '';
while (!feof($fp))
{
$s .= fgets($fp, 128);
}
var_dump($s);
fclose($fp);
?>
测试方法:
ls -lh | php php_read_pipe.php
Rainbird 还给出更加简单的代码:
file_get_contents('php://stdin')
如果是有很多数据要传输过来,一般来说,是每4K传输一次。
直到传输完成。那可能不能简单的使用:
file_get_contents('php://stdin')。这样的话,一直会在等待。
分开处理的话,能够,读取一定的量后处理一部分。然后释放掉一部分的内存。
比如我要遍历所有的文件。可以这样处理
find / | php php php_read_pipe.php
大家根据具体情况具体分析。
rainbird给您发了短消息:
已经写了不少后台运行的deamon了.用的挺顺手的,但是我现在想获取管道传过来的内容,不知道咋实现,类似echo "aaaa" |a.php,a.php怎么获得echo的内容,不知道您有什么高见.
今天收到一条消息,解决的方法给大家分享一下:
实际上,shell 的 | 实际上表示的是 前一个的 标准输出 作为后一个的标准输入。虽然实现是通过pipe来实现的,
但是你写php代码的时候不需要知道底层的运作。你直接作为标准输入读取就可以了:
下面是一个实验代码:
代码如下:
<?php
$fp = fopen("php://stdin", "r");
$s = '';
while (!feof($fp))
{
$s .= fgets($fp, 128);
}
var_dump($s);
fclose($fp);
?>
测试方法:
代码如下:
ls -lh | php php_read_pipe.php
Rainbird 还给出更加简单的代码:
file_get_contents('php://stdin')
如果是有很多数据要传输过来,一般来说,是每4K传输一次。
直到传输完成。那可能不能简单的使用:
file_get_contents('php://stdin')。这样的话,一直会在等待。
分开处理的话,能够,读取一定的量后处理一部分。然后释放掉一部分的内存。
比如我要遍历所有的文件。可以这样处理
find / | php php php_read_pipe.php
大家根据具体情况具体分析。
最新技术文章: