Fatal error: Access level to xxx must be protected 错误解决

 更新时间:2016年11月25日 15:34  点击:1457
php出现Fatal error: Access level to xxx must be protected 错误我们可如何来解决呢,对于这个问题下面我们就一起来看看它的解决办法.

今天程序突然出现这样的报错
Fatal error: Access level to xxx must be protected (as in class xxx) or weaker in xxx.php on line

原因是子类中定义了与父类一样的方法名

子类:
private function return_json($message,$result='true') {
        $data = array();
        $data['result'] = $result;
        $data['message'] = $message;
        self::echo_json($data);
}

private function echo_json($data) {
    if (strtoupper(CHARSET) == 'GBK'){
        $data = Language::getUTF8($data);//网站GBK使用编码时,转换为UTF-8,防止json输出汉字问题
    }
    echo json_encode($data);
}

父类:

/**
 * 返回json状态
 */
protected function return_json($message,$result='true') {
    $data = array();
    $data['result'] = $result;
    $data['message'] = $message;
    self::echo_json($data);
}

protected function echo_json($data) {
    if (strtoupper(CHARSET) == 'GBK'){
        $data = Language::getUTF8($data);//网站GBK使用编码时,转换为UTF-8,防止json输出汉字问题
    }
    echo json_encode($data);die;
}

解决办法

把子类中的private 改成 protected,或者避免方法重名。这里例子中很显然是相同的方法进行了重复的定义,子类删除这两个方法即可。

空白字符在php中有空格也有ascill空格了所以我们要替换需要整理一起来操作,下面来看一个php替换过滤所有的空白字符与空格的例子

在php中自带的trim函数只能替换左右两端的空格,感觉在有些情况下不怎么好使,如果要将一个字符串中所有空白字符过滤掉(空格、全角空格、换行等),那么我们可以自己写一个过滤函数。

php学习str_replace函数都知道,可以批量替换的,所以我们可以用如下的源码实现替换过滤一个字符串所有空白字符了。

php源码参考:

<?php
$str = 'jkgsd
gsgsdgs  gsdg gsd';
echo myTrim($str);
function myTrim($str)
{
 $search = array(" "," ","\n","\r","\t");
 $replace = array("","","","","");
 return str_replace($search, $replace, $str);
}
?>

运行代码,页面输出:jkgsdgsgsdgsgsdggsd,完美实现了我们想要的效果。

完成这些可以使用PHP的正则表达式来完成

下例可以去除额外Whitespace

<?php

$str = " This line  contains\tliberal \r\n use of   whitespace.\n\n";

// First remove the leading/trailing whitespace

//去掉开始和结束的空白

$str = trim($str);

// Now remove any doubled-up whitespace

//去掉跟随别的挤在一块的空白

$str = preg_replace('/\s(?=\s)/', '', $str);


// Finally, replace any non-space whitespace, with a space

//最后,去掉非space 的空白,用一个空格代替

$str = preg_replace('/[\n\r\t]/', ' ', $str);

// Echo out: 'This line contains liberal use of whitespace.'

echo "<pre>{$str}</pre>";

?>

这个例子剥离多余的空白字符

<?php
$str = 'foo o';
$str = preg_replace('/\s\s+/', '', $str);
// 将会改变为'foo o'
echo $str;
?>

pcntl中的php必须要安装pcntl才可以实现多线程了,在网上找到许多的关于pcntl安装教程,下面整理了一篇比较完整的关于php pcntl安装与使用方法。

pcntl中php实现多进程必须要安装的扩展,现将扩展安装步骤写在下面。

 

一、两种安装方式

 

1、重新编译PHP的后面configrue提示加上?enable-pcntl。
2、不重新编译php,直接编译安装pcntl扩展。

# cd /usr/local/src/php-5.2.6/ext/pcntl

# /usr/local/php/bin/phpize

# ./configure ?with-php-config=/usr/local/php/bin/php-config

# make && make install

 

然后将,pcntl.so 加到php.ini中就可以了,使用php -m查看模块命令可以查看已安装的模块。

 

二、实例
 

for($x = 1;$x&lt;= 2;$x++){

        $pid[$x] = pcntl_fork();

        if ($pid[$x] == -1) {

                die("could not fork");

        } elseif ($pid[$x]) {

                echo "Parent: create ".$pid[$x]."n";

        } else {

                        echo "fork ".getmypid()." start:n";

                        for($i = 0;$i&lt;10;$i++){

                                echo $x.": ".$i."n";

                                sleep(1);

                        }

                exit;

        }

}

本文实例讲述了PHP的pcntl多进程用法。分享给大家供大家参考。具体分析如下:

PHP使用PCNTL系列的函数也能做到多进程处理一个事务。比如我需要从数据库中获取80w条的数据,再做一系列后续的处理,这个时候,用单进程?你可以等到明年今天了。所以应该使用pcntl函数了。

假设我想要启动20个进程,将1-80w的数据分成20份来做,主进程等待所有子进程都结束了才退出:

$max = 800000;

$workers = 20;

 

$pids = array();

for($i = 0; $i < $workers; $i++){

    $pids[$i] = pcntl_fork();

    switch ($pids[$i]) {

        case -1:

            echo "fork error : {$i} \r\n";

            exit;

        case 0:

            $param = array(

                'lastid' => $max / $workers * $i,

                'maxid' => $max / $workers * ($i+1),

            );

            $this->executeWorker($input, $output, $param);

            exit;

        default:

            break;

    }

}

 

foreach ($pids as $i => $pid) {

    if($pid) {

        pcntl_waitpid($pid, $status);

    }

}

 

这里当pcntl_fork出来以后,会返回一个pid值,这个pid在子进程中看是0,在父进程中看是子进程的pid(>0),如果pid为-1说明fork出错了。

使用一个$pids数组就可以让主进程等候所有进程完结之后再结束了

例子测试

pcntl的扩展的安装就不说了,很简单,这里结合实例说一下pcntl_fork的运行方式

<?php

  echo $pid= pcntl_fork();

  if ($pid == -1) { 

     die('could not fork'); 

  } else if (!$pid) {

   //这里是子进程

  echo '-';

  exit();

  }else{

  //这里是父进程

 echo 'A';

 

 echo 'B';

  }

我用cli运行多次的结果是

$pid为0说明是子进程,因为pcntl_fork()的作用就是当程序运行到这里,就试图去创建一个子进程,如果创建成果,那么返回当前进程的子进程id,0表示当前进程没有子进程,那么其进程本身不就是子进程了,而如果有进程id,表示其有子进程,那么其不就是父进程。就好像是从这个位置其,下面的所有代码被复制到了另一个进程中执行一样,产生了一个子进程。但是从上面多次执行结果看,大部分情况下是先执行子进程的,这和我之前网上查的资料有些出入,而且这个顺序也不是固定的。但是我们发现倒数第三条,是先执行父进程,后执行的子进程,这时候子进程是有一定风险的,虽然子进程不会死,因为他会过继到1进程,但如果要等待子进程执行完可以这样:
 

<?php
  echo $pid= pcntl_fork();
  if ($pid == -1) { 
     die('could not fork'); 
  } else if (!$pid) {
   //这里是子进程
  echo '-';
  exit();
  }else{
  //这里是父进程
 echo 'A';
  pcntl_wait($status);//父进程执行到这里等等子进程执行完再执行
 echo 'B';
  }
 
运行结果:
 
0-31843AB[root@client 60.test.com]# php index.php 
0-31845AB[root@client 60.test.com]# php index.php 
0-31847AB[root@client 60.test.com]# php index.php 
0-31849AB[root@client 60.test.com]# php index.php 
0-31851AB[root@client 60.test.com]# php index.php 
0-31853AB[root@client 60.test.com]# php index.php 
0-31855AB[root@client 60.test.com]# php index.php 
31857A0-B[root@client 60.test.com]# php index.php 
0-31859AB[root@client 60.test.com]# php index.php 
0-31861AB[root@client 60.test.com]# php index.php 
0-31863AB[root@client 60.test.com]# php index.php 
0-31865AB[root@client 60.test.com]# php index.php 
0-31867AB[root@client 60.test.com]# php index.php 
0-31869AB[root@client 60.test.com]# php index.php 
0-31871AB[root@client 60.test.com]# php index.php 
0-31873AB[root@client 60.test.com]# php index.php 
0-31875AB[root@client 60.test.com]# php index.php 
0-31877AB[root@client 60.test.com]# php index.php 
0-31879AB[root@client 60.test.com]# php index.php 
0-31881AB[root@client 60.test.com]# php index.php 
0-31883AB[root@client 60.test.com]# php index.php

就是我们想要的结果了,其他都没有问题,因为都是先执行的子进程,而这条是先执行了父进程,走到输出A就等子进程执行完才执行的下面的。所以这就是

ntl_wait($status)

的作用。

好了,基本就是这些了。至于进程间或线程间的通信,可以利用类似共享内存变量等的来做。具体情况具体对待吧。

使用PHP内置web服务器第一次听说过了,只听过在windows中内置了php运行环境了,那么使用PHP内置web服务器到底是一个什么东西呢,一起来看看。

PHP 5.4起就在CLI SAPI中内置了web服务器,这给开发者带来了方便。
只需在项目目录下执行

php -S localhost:8001

访问链接,终端就会产生access log

E:\php\test\web_server>php -S localhost:8001
PHP 5.4.33 Development Server started at Sat Sep 26 12:10:01 2015
Listening on http://localhost:8001
Document root is E:\php\test\web_server
Press Ctrl-C to quit.
[Sat Sep 26 12:10:07 2015] 127.0.0.1:65349 [200]: /phpinfo.php
[Sat Sep 26 12:10:07 2015] 127.0.0.1:65350 [200]: /phpinfo.php?=PHPE9568F34-D428-11d2-A769-00AA001ACF42
[Sat Sep 26 12:10:07 2015] 127.0.0.1:65351 [200]: /phpinfo.php?=PHPE9568F35-D428-11d2-A769-00AA001ACF42
[Sat Sep 26 12:10:07 2015] 127.0.0.1:65352 [404]: /favicon.ico - No such file or directory

可指定目录和不同的php.ini配置

php -S localhost:8001 -t E:\php\test\web_server\ -c D:\software\amp\php-5.6.5-Win32-VC11-x64\php.ini

原来PHP 5.4起就在CLI SAPI内置了服务器哦,小编使用的最高版本也是php5.3哦。

本文章为各位收藏PHP常用自定义函数了,这些函数是我们开发应用中常用到了,希望文章对各位会带来帮助。

 
<?
function GetIP() { //获取IP
    if ($_SERVER["HTTP_X_FORWARDED_FOR"])
        $ip = $_SERVER["HTTP_X_FORWARDED_FOR"]; //OSPHP.com.CN
    else if ($_SERVER["HTTP_CLIENT_IP"])
        $ip = $_SERVER["HTTP_CLIENT_IP"];
    else if ($_SERVER["REMOTE_ADDR"])
        $ip = $_SERVER["REMOTE_ADDR"];
    else if (getenv("HTTP_X_FORWARDED_FOR"))
        $ip = getenv("HTTP_X_FORWARDED_FOR");
    else if (getenv("HTTP_CLIENT_IP"))
        $ip = getenv("HTTP_CLIENT_IP");
    else if (getenv("REMOTE_ADDR"))
        $ip = getenv("REMOTE_ADDR");
    else
        $ip = "Unknown";
    return $ip;
}
?>


 
<?php
function DateAdd($date, $int, $unit = "d") { //时间的增加(还可以改进成时分秒都可以增加,有时间再补上)
    $dateArr = explode("-", $date);
    $value[$unit] = $int; //OSPHP.COm.CN
    return date("Y-m-d", mktime(0,0,0, $dateArr[1] + $value['m'], $dateArr[2] + $value['d'], $dateArr[0] + $value['y']));
}

function GetWeekDay($date) {  //计算出给出的日期是星期几
    $dateArr = explode("-", $date);
    return date("w", mktime(0,0,0,$dateArr[1],$dateArr[2],$dateArr[0])); //OsPHP.COM.CN
}
?>


 
<?
function check_date($date) { //检查日期是否合法日期
    $dateArr = explode("-", $date);
    if (is_numeric($dateArr[0]) && is_numeric($dateArr[1]) && is_numeric($dateArr[2])) {
        return checkdate($dateArr[1],$dateArr[2],$dateArr[0]);
    }
    return false;
}
function check_time($time) {  //检查时间是否合法时间
    $timeArr = explode(":", $time);
    if (is_numeric($timeArr[0]) && is_numeric($timeArr[1]) && is_numeric($timeArr[2])) { //开源代码OSPhP.COm.CN
        if (($timeArr[0] >= 0 && $timeArr[0] <= 23) && ($timeArr[1] >= 0 && $timeArr[1] <= 59) && ($timeArr[2] >= 0 && $timeArr[2] <= 59))
            return true;
        else
            return false;
    }
    return false;
}

function DateDiff($date1, $date2, $unit = "") { //时间比较函数,返回两个日期相差几秒、几分钟、几小时或几天
    switch ($unit) {
        case 's':
            $dividend = 1;
            break;
        case 'i':
            $dividend = 60;
            break;
        case 'h':
            $dividend = 3600;
            break;
        case 'd':
            $dividend = 86400;
            break;
        default:
            $dividend = 86400;
    }
    $time1 = strtotime($date1);
    $time2 = strtotime($date2);
    if ($time1 && $time2)
        return (float)($time1 - $time2) / $dividend;
    return false;
}

?>

 
PHP重定向
<?
方法一:header("Location: index.php");
方法二:echo "<scrīpt>window.location ="$PHP_SELF";</scrīpt>"; //PHP开源代码
方法三:echo "<META HTTP-EQUIV="Refresh" CONTENT="0; URL=index.php">";

?>

 
获取访问者浏览器
<?
function browse_infor()
{
$browser="";$browserver="";
$Browsers =array("Lynx","MOSAIC","AOL","Opera","JAVA","MacWeb","WebExplorer","OmniWeb");
$Agent = $GLOBALS["HTTP_USER_AGENT"];
for ($i=0; $i<=7; $i++)
{
if (strpos($Agent,$Browsers[$i]))
{
$browser = $Browsers[$i];
$browserver ="";
}
}
if (ereg("Mozilla",$Agent) && !ereg("MSIE",$Agent))
{
$temp =explode("(", $Agent); $Part=$temp[0];
$temp =explode("/", $Part); $browserver=$temp[1]; //开源代码OSPhP.COm.CN
$temp =explode(" ",$browserver); $browserver=$temp[0];
$browserver =preg_replace("/([d.]+)/","1",$browserver);
$browserver = " $browserver"; //oSPHP.COM.CN
$browser = "Netscape Navigator";
}
if (ereg("Mozilla",$Agent) && ereg("Opera",$Agent))
{
$temp =explode("(", $Agent); $Part=$temp[1]; //OSPHP.COM.Cn开源
$temp =explode(")", $Part); $browserver=$temp[1];
$temp =explode(" ",$browserver);$browserver=$temp[2];
$browserver =preg_replace("/([d.]+)/","1",$browserver);
$browserver = " $browserver";
$browser = "Opera";
}
if (ereg("Mozilla",$Agent) && ereg("MSIE",$Agent))
{
$temp = explode("(", $Agent); $Part=$temp[1];
$temp = explode(";",$Part); $Part=$temp[1];
$temp = explode(" ",$Part);$browserver=$temp[2];
$browserver =preg_replace("/([d.]+)/","1",$browserver);
$browserver = " $browserver"; //OSPHP.COM.Cn开源
$browser = "Internet Explorer";
}
if ($browser!="")
{
$browseinfo = "$browser$browserver";
}
else
{
$browseinfo = "Unknown";
}
return $browseinfo;
}
//调用方法$browser=browseinfo() ;直接返回结果

?>

 
获取访问者操作系统
<?
function osinfo() {
$os="";
$Agent = $GLOBALS["HTTP_USER_AGENT"];
if (eregi('win',$Agent) && strpos($Agent, '95')) { //开源OSPhP.COM.CN
$os="Windows 95";
}
elseif (eregi('win 9x',$Agent) && strpos($Agent, '4.90')) {
$os="Windows ME";
}
elseif (eregi('win',$Agent) && ereg('98',$Agent)) {
$os="Windows 98";
}
elseif (eregi('win',$Agent) && eregi('nt 5.0',$Agent)) {
$os="Windows 2000";
}
elseif (eregi('win',$Agent) && eregi('nt',$Agent)) {
$os="Windows NT";
}
elseif (eregi('win',$Agent) && eregi('nt 5.1',$Agent)) {
$os="Windows XP";
}
elseif (eregi('win',$Agent) && ereg('32',$Agent)) { //PHP开源代码
$os="Windows 32";
}
elseif (eregi('linux',$Agent)) {
$os="Linux";
}
elseif (eregi('unix',$Agent)) {
$os="Unix";
}
elseif (eregi('sun',$Agent) && eregi('os',$Agent)) {
$os="SunOS";
}
elseif (eregi('ibm',$Agent) && eregi('os',$Agent)) {
$os="IBM OS/2";
}
elseif (eregi('Mac',$Agent) && eregi('PC',$Agent)) {
$os="Macintosh";
}
elseif (eregi('PowerPC',$Agent)) {
$os="PowerPC";
}
elseif (eregi('AIX',$Agent)) {
$os="AIX";
}
elseif (eregi('HPUX',$Agent)) {
$os="HPUX";
}
elseif (eregi('NetBSD',$Agent)) {
$os="NetBSD";
}
elseif (eregi('BSD',$Agent)) {
$os="BSD";
}
elseif (ereg('OSF1',$Agent)) {
$os="OSF1";
}
elseif (ereg('IRIX',$Agent)) {
$os="IRIX";
}
elseif (eregi('FreeBSD',$Agent)) {
$os="FreeBSD";
}
if ($os=='') $os = "Unknown";
return $os;
}
//调用方法$os=os_infor() ;

?>

 
文件格式类
<?
$mime_types = array(
'gif' => 'image/gif',
'jpg' => 'image/jpeg',
'jpeg' => 'image/jpeg',
'jpe' => 'image/jpeg',
'bmp' => 'image/bmp',
'png' => 'image/png',
'tif' => 'image/tiff', //OSPHP.COm.CN
'tiff' => 'image/tiff',
'pict' => 'image/x-pict',
'pic' => 'image/x-pict',
'pct' => 'image/x-pict',
'tif' => 'image/tiff',
'tiff' => 'image/tiff',
'psd' => 'image/x-photoshop',

'swf' => 'application/x-shockwave-flash',
'js' => 'application/x-javascrīpt',
'pdf' => 'application/pdf',
'ps' => 'application/postscrīpt',
'eps' => 'application/postscrīpt',
'ai' => 'application/postscrīpt',
'wmf' => 'application/x-msmetafile',

'css' => 'text/css',
'htm' => 'text/html',
'html' => 'text/html',
'txt' => 'text/plain',
'xml' => 'text/xml',
'wml' => 'text/wml',
'wbmp' => 'image/vnd.wap.wbmp',

'mid' => 'audio/midi',
'wav' => 'audio/wav',
'mp3' => 'audio/mpeg',
'mp2' => 'audio/mpeg',

'avi' => 'video/x-msvideo',
'mpeg' => 'video/mpeg',
'mpg' => 'video/mpeg',
'qt' => 'video/quicktime',
'mov' => 'video/quicktime',

'lha' => 'application/x-lha',
'lzh' => 'application/x-lha',
'z' => 'application/x-compress',
'gtar' => 'application/x-gtar',
'gz' => 'application/x-gzip',
'gzip' => 'application/x-gzip',
'tgz' => 'application/x-gzip',
'tar' => 'application/x-tar',
'bz2' => 'application/bzip2',
'zip' => 'application/zip',
'arj' => 'application/x-arj',
'rar' => 'application/x-rar-compressed',

'hqx' => 'application/mac-binhex40',
'sit' => 'application/x-stuffit',
'bin' => 'application/x-macbinary',

'uu' => 'text/x-uuencode',
'uue' => 'text/x-uuencode',

'latex'=> 'application/x-latex',
'ltx' => 'application/x-latex',
'tcl' => 'application/x-tcl',

'pgp' => 'application/pgp',
'asc' => 'application/pgp',
'exe' => 'application/x-msdownload',
'doc' => 'application/msword', //开源OSPhP.COM.CN
'rtf' => 'application/rtf',
'xls' => 'application/vnd.ms-excel',
'ppt' => 'application/vnd.ms-powerpoint',
'mdb' => 'application/x-msaccess',
'wri' => 'application/x-mswrite',
);

?>

 
php生成excel文档
<?
header("Content-type:application/vnd.ms-excel");
header("Content-Disposition:filename=test.xls");
echo "test1t";
echo "test2tn";
echo "test1t";
echo "test2tn";
echo "test1t";
echo "test2tn";
echo "test1t";
echo "test2tn";
echo "test1t";
echo "test2tn";
echo "test1t";
echo "test2tn";
//改动相应文件头就可以输出.doc .xls等文件格式了

?>

 
时间比较问题
举一个简单例子说明:比如一个论坛对当天发表的贴子用new图片标记一下。 //开源OSPhP.COM.CN
方法一:
<?
//$db->rows[$i][date]中为数据库中datetime字段值.
$today=time();
$theDay=date("Y-m-d H:i:s",$today-24*3600);
$newTag=$db->rows[$i][date]>=$theDay?"<img src='../image/newinfor.gif'>":""; //OSPHP.com.CN
//方法二:
$newTag=$db->rows[$i][date]>=date("Y-m-d 00:00:00")?"<img src='../image/newinfor.gif'>":"";

?>

 
//提取页面和浏览器提交的变量,作用相当于使PHP.INI开了全局变量 //OSPHP.COm.CN
<?
@extract($_SERVER, EXTR_SKIP);
@extract($_SESSION, EXTR_SKIP);
@extract($_POST, EXTR_SKIP);
@extract($_FILES, EXTR_SKIP);
@extract($_GET, EXTR_SKIP);
@extract($_ENV, EXTR_SKIP);

?>

 
//读取文件函数
<?
function readfromfile($file_name) {
if (file_exists($file_name)) {
$filenum=fopen($file_name,"r");
flock($filenum,LOCK_EX);
$file_data=fread($filenum, filesize($file_name));
rewind($filenum); //oSPHP.COM.CN
fclose($filenum);
return $file_data;
}
}

?>

 
//写入文件函数
<?
function writetofile($file_name,$data,$method="w") {
$filenum=fopen($file_name,$method);
flock($filenum,LOCK_EX);
$file_data=fwrite($filenum,$data);
fclose($filenum);
return $file_data;
}

?>

 //开源代码OSPhP.COm.CN
//页面快速转向
<?
function turntopage($url="index.php",$info = "页面转向中...",$second=2){
print "<html>n<head>n<title>页面转向中....</title>n";
print "<meta http-equiv="refresh" content="$second;url=$url">n";
print "<style type="text/css">n<!--n";
print "td { font-family: "Verdana", "Arial";font-size: 12px}n";
print "A {COLOR: #000000; TEXT-DECORATION: none}n";
print "-->n</style>n";
print "</head>n<body>n";
print "<table width="100%" border="0" align="center">n";
print " <tr>n";
print " <td height="200"> </td>n";
print " </tr>n";
print " <tr>n";
print " <td align="center">n";
print " <table width="60%" border="0" cellpadding="8" bgcolor="#AA9FFF">n"; //OSPHP.COm.CN
print " <tr>n";
print " <td height="30" align="center">页面转向提示信息</td>n";
print " </tr>n";
print " <tr>n";
print " <td align="center">$info</td>n";
print " </tr>n"; //OsPHP.COM.CN
print " <tr>n";
print " <td align="center">n";
print " <a href="$url">如果你的浏览器不支持自动跳转,请按这里</a></td>n";
print " </tr>n";
print " </tr>n";
print " </table></td>n";
print " </tr>n";
print " <tr>n";
print " <td height="200"> </td>n";
print " </tr>n";
print "</table>n";
print "</body>n</html>";
exit;
?>

产生随机字符串函数
<?
function random($length) {
$hash = @#@#;
$chars = @#ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz@#;
$max = strlen($chars) - 1;
mt_srand((double)microtime() * 1000000);
for($i = 0; $i < $length; $i++) { //PHP开源代码
  $hash .= $chars[mt_rand(0, $max)];
}
return $hash;
}

?>

 
截取一定长度的字符串(该函数对GB2312使用有效)
<?
function Wordscut($string, $length ,$sss=0) {
if(strlen($string) > $length) {
               if($sss){
                      $length=$length - 3;
                      $addstr=@# ...@#; //开源代码OSPhP.COm.CN
                }
  for($i = 0; $i < $length; $i++) {
   if(ord($string[$i]) > 127) {
    $wordscut .= $string[$i].$string[$i + 1]; //oSPHP.COM.CN
    $i++;
   } else {
    $wordscut .= $string[$i];
   }
  }
  return $wordscut.$addstr;
}
return $string;
}

?>

 
取得客户端IP地址
<?
function GetIP(){
             if (getenv("HTTP_CLIENT_IP") && strcasecmp(getenv("HTTP_CLIENT_IP"), "unknown"))
                   $ip = getenv("HTTP_CLIENT_IP");
             else if (getenv("HTTP_X_FORWARDED_FOR") && strcasecmp(getenv("HTTP_X_FORWARDED_FOR"), "unknown"))
                   $ip = getenv("HTTP_X_FORWARDED_FOR"); //oSPHP.COM.CN
             else if (getenv("REMOTE_ADDR") && strcasecmp(getenv("REMOTE_ADDR"), "unknown"))
                   $ip = getenv("REMOTE_ADDR");
             else if (isset($_SERVER[@#REMOTE_ADDR@#]) && $_SERVER[@#REMOTE_ADDR@#] && strcasecmp($_SERVER[@#REMOTE_ADDR@#], "unknown"))
                   $ip = $_SERVER[@#REMOTE_ADDR@#];
             else
                  $ip = "unknown";

             return($ip);
}

?>
//PHP开源代码
 
判断邮箱地址
<?
function checkEmail($inAddress)
{
return (ereg("^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(.[a-zA-Z0-9_-])+",$inAddress));
}

?>

 
分页(两个函数配合使用)
<?
function getpage($sql,$page_size=20)
{
      global $page,$totalpage,$sums;  //out param
      $page = $_GET["page"];
      //$eachpage = $page_size;
      $pagesql = strstr($sql," from ");
      $pagesql = "select count(*) as ids ".$pagesql;
      $result = mysql_query($pagesql);
      if($rs = mysql_fetch_array($result)) $sums = $rs[0];
      $totalpage = ceil($sums/$page_size);
      if((!$page)($page<1)) $page=1;
   $startpos = ($page-1)*$page_size;
   $sql .=" limit $startpos,$page_size ";
    return $sql;
}
function showbar($string="")
{     
    global $page,$totalpage;
$out="共<font ".$totalpage."color=@#red@#><b>".$totalpage."</b></font>页  ";
    $linkNum =4;
    $start = ($page-round($linkNum/2))>0 ? ($page-round($linkNum/2)) : "1";
    $end   = ($page+round($linkNum/2))<$totalpage ? ($page+round($linkNum/2)) : $totalpage;
    $prestart=$start-1;
    $nextend=$end+1;
    if($page<>1) 
$out .= "<a href=@#?page=1&&".$string."@#title=第一页>第一页</a> ";
    if($start>1)
$out.="<a href=@#?page=".$prestart."@# title=上一页>..<<</a> ";

for($t=$start;$t<=$end;$t++)
    {
     $out .= ($page==$t) ? "<font [".$t."]color=@#red@#><b>[".$t."]</b></font> " : "<a $thref=@#?page=$t&&".$string."@#>$t</a> ";
    }
if($end<$totalpage)
$out.="<a href=@#?page=".$nextend."&&".$string."@# title=下一页>>>..</a>";
    if($page<>$totalpage)
   $out .= " <a href=@#?page=".$totalpage."&&".$string."@# title=最后页>最后页</a>"; //开源OSPhP.COM.CN
   return $out;
}

?>

 
获取新插入数据的ID
<?
mysql_insert_id();
?>

 
//获得当前的脚本网址
<?
function get_php_url(){
        if(!empty($_server["REQUEST_URI"])){
                $scriptName = $_SERVER["REQUEST_URI"];
                $nowurl = $scriptName;
        }else{
                $scriptName = $_SERVER["PHP_SELF"];
                if(empty($_SERVER["QUERY_STRING"])) $nowurl = $scriptName;
                else $nowurl = $scriptName."?".$_SERVER["QUERY_STRING"];
        }
        return $nowurl;
}

?>

 
//把全角数字转为半角数字
<?
function GetAlabNum($fnum){
        $nums = array("0","1","2","3","4","5","6","7","8","9");
        $fnums = "0123456789";
        for($i=0;$i<=9;$i++) $fnum = str_replace($nums[$i],$fnums[$i],$fnum);
        $fnum = ereg_replace("[^0-9.]|^0{1,}","",$fnum);
        if($fnum=="") $fnum=0;
        return $fnum;
}

?>

 
//去除HTML标记
<?
function Text2Html($txt){
        $txt = str_replace("  "," ",$txt);
        $txt = str_replace("<","&lt;",$txt);
        $txt = str_replace(">","&gt;",$txt);
        $txt = preg_replace("/[rn]{1,}/isU","
rn",$txt);
        return $txt;
}

?>

 
//相对路径转化成绝对路径
<?
function relative_to_absolute($content, $feed_url) { 
    preg_match('/(http|https|ftp):///', $feed_url, $protocol); 
    $server_url = preg_replace("/(http|https|ftp|news):///", "", $feed_url); 
    $server_url = preg_replace("//.*/", "", $server_url); 

    if ($server_url == '') { 
        return $content; 
    } 

    if (isset($protocol[0])) { 
        $new_content = preg_replace('/href="//', 'href="'.$protocol[0].$server_url.'/', $content); 
        $new_content = preg_replace('/src="//', 'src="'.$protocol[0].$server_url.'/', $new_content); 
    } else { 
        $new_content = $content; 
    } 
    return $new_content; 

?>

 
//取得所有链接
<?
function get_all_url($code){ 
        preg_match_all('/<as+href=["|']?([^>"' ]+)["|']?s*[^>]*>([^>]+)</a>/i',$code,$arr);  //OsPHP.COM.CN
        return array('name'=>$arr[2],'url'=>$arr[1]); 
}

?>

 
//HTML表格的每行转为CSV格式数组
<?
function get_tr_array($table) {
        $table = preg_replace("'<td[^>]*?>'si",'"',$table);
        $table = str_replace("</td>",'",',$table);
        $table = str_replace("</tr>","{tr}",$table);
        //去掉 HTML 标记 
        $table = preg_replace("'<[/!]*?[^<>]*?>'si","",$table);
        //去掉空白字符  
        $table = preg_replace("'([rn])[s]+'","",$table);
        $table = str_replace(" ","",$table);
        $table = str_replace(" ","",$table);

        $table = explode(",{tr}",$table);
        array_pop($table);
        return $table;
}

?>

//将HTML表格的每行每列转为数组,采集表格数据
<?
function get_td_array($table) {
        $table = preg_replace("'<table[^>]*?>'si","",$table); //开源代码OSPhP.COm.CN
        $table = preg_replace("'<tr[^>]*?>'si","",$table);
        $table = preg_replace("'<td[^>]*?>'si","",$table);
        $table = str_replace("</tr>","{tr}",$table); //开源代码OSPHP.COM.Cn
        $table = str_replace("</td>","{td}",$table);
        //去掉 HTML 标记 
        $table = preg_replace("'<[/!]*?[^<>]*?>'si","",$table);
        //去掉空白字符  
        $table = preg_replace("'([rn])[s]+'","",$table);
        $table = str_replace(" ","",$table);
        $table = str_replace(" ","",$table);
        
        $table = explode('{tr}', $table);
        array_pop($table); //OSPHP.COM.Cn开源
        foreach ($table as $key=>$tr) {
                $td = explode('{td}', $tr);
                array_pop($td);
            $td_array[] = $td;
        }
        return $td_array;
}

?>

 
//返回字符串中的所有单词 $distinct=true 去除重复
<?
function split_en_str($str,$distinct=true) {
        preg_match_all('/([a-zA-Z]+)/',$str,$match);
        if ($distinct == true) {
                $match[1] = array_unique($match[1]);
        }
        sort($match[1]);
        return $match[1];
}
?>

 
//打印出为本PHP项目做出贡献的人员的清单
<?
string phpcredits(void)

?>

[!--infotagslink--]

相关文章

  • Ecshop提示Only variables should be passed by reference in错误

    在安装好ecshop软件之后我们打开首页时提示Only variables should be passed by reference in错误了,碰到这个问题是什么原因呢?下面我们就一起来看看解决办法吧。...2016-11-25
  • 409错误是什么 http 409错误怎么解决

    409错误是什么?http 409错误怎么解决呢?不少站长在遇到这个错误代码之后都一筹莫展,本次一聚教程网为大家带来了详细的说明,快来看看吧。 409错误是什么: HTTP 40...2017-01-22
  • 414错误是什么 414错误怎么解决

    414错误是HTTP协议状态码中的一种,很多都还不知道414错误是什么,以及不知道怎么解决414错误,那么就来看看小编带来的介绍吧。 414错误是什么: HTTP 414错误,(Requ...2017-01-22
  • http 405错误是什么 http 405错误怎么解决

    http 405错误是什么?http 405错误怎么解决?相信很多站长都在找这两个问题的答案,本次小编为大家带来了详细的教程,快来看看吧。 405错误是什么: HTTP 405错误是H...2017-01-22
  • 401错误码代表什么 401错误解决办法

    401是HTTP状态码的一种,属于“请示错误”,表示请求可能出错,已妨碍了服务器对请求的处理。具体的401错误是指:未授权,请求要求进行身份验证。登录后,服务器可能会返回对页面...2017-01-22
  • http 402错误是什么 http 402简介

    http 402错误是什么?402错误较为少见,一般不轻易出现,下面小编就来告诉大家402错误是什么吧。 HTTP 402错误是HTTP状态码的一种,表示“要求付费”; 所求的...2017-01-22
  • 411错误是什么 411错误怎么解决

    411错误是HTTP协议状态码的一种,很多人都还不知道411错误是什么,本次一聚教程网将为大家进行解答,并且告诉大家411错误怎么解决。 411错误是什么: HTTP 411错误,(Lengt...2017-01-22
  • apache网站提示503错误解决办法

    Apache status 503 的原因大致有如下几种情况 : 1、 CPU 负载过高,服务器响应不过来,返回503 2、 系统连接数超限,超过MaxVhostClients的上限,返回503 3、 单IP连接数超限,超过M...2016-01-28
  • 404错误是什么 404错误怎么解决

    403错误是网站访问过程中,常见的错误提示。资源不可用,服务器理解客户的请求,但拒绝处理它。通常由于服务器上文件或目录的权限设置导致,比如IIS或者apache设置了访问权限...2017-01-22
  • 403错误是什么 403错误怎么解决

    403错误是HTTP状态码的一种,属于“请示错误”,表示服务器拒绝请求。如果在搜索引擎尝试抓取您网站上的有效网页时显示此状态代码,那么,这可能是您的服务器或主机拒绝搜索...2017-01-22
  • 412错误是什么 412错误怎么解决

    412错误是什么?412错误怎么解决?本次一聚教程网将为大家带来详细的介绍,帮助大家全面了解412错误的意思以及解决412错误的方法。 412错误是什么: HTTP 412错误,(Precond...2017-01-22
  • Perl CPAN::Modulelist的解决办法

    今天用CPAN安装Term::ReadLine,报了个这样的错误 Going to read /root/.cpan/sources/modules/03modlist.data.gz Can't locate object method "data" via package "C...2016-11-25
  • HTTP 408错误是什么 HTTP 408错误解决方法

    相信很多站长都遇到过这样一个问题,访问页面时出现408错误,下面一聚教程网将为大家介绍408错误出现的原因以及408错误的解决办法。 HTTP 408错误出现原因: HTT...2017-01-22
  • 406错误是什么 406错误怎么解决

    HTTP 406错误是HTTP协议状态码的一种,表示无法使用请求的内容特性来响应请求的网页。一般是指客户端浏览器不接受所请求页面的 MIME 类型。 而MIME类型是在把输出...2017-01-22
  • 407错误是什么 407错误怎么解决

    407错误是什么?407错误怎么解决?不少站长都遇到过407错误,下面小编将告诉大家如何处理407错误。 407错误是什么: HTTP 407错误是HTTP协议状态码的一种,表示需要代...2017-01-22
  • 410错误是什么 http 410错误怎么解决

    410错误是HTTP协议状态码的一种,本次一聚教程网将为大家详细介绍HTTP 410错误是什么,以及410错误的解决办法。 410错误是什么: HTTP 410错误是HTTP协议状态码的...2017-01-22
  • HTTP 400错误是什么 HTTP 400错误怎么解决

    每当遇到http错误代码为400,代表客户端发起的请求不符合服务器对请求的某些限制,或者请求本身存在一定的错误,那么HTTP 400错误怎么解决呢?请看下文介绍。 目前400错...2017-01-22
  • PHP Fatal error: Cannot use object of type stdClass as array in错误

    下面一起来看看在php开发中碰到PHP Fatal error: Cannot use object of type stdClass as array in错误问题的解决办法吧。 普通的数组出现如下错误 代码...2016-11-25
  • PHP Curl出现403错误的解决办法

    自己用的小PHP应用,使用curl抓网页下来处理,为了穿墙方便,使用Privoxy作为代理,便于选择哪些网站使用proxy、哪些不用。但今天却遇到了奇怪的问题,访问google baidu这些网站居然都返回403错误,而访问其他的一些网站没事,如果...2014-05-31
  • C#新手常犯的错误汇总

    这篇文章主要介绍了C#新手常犯的错误汇总,对于经验丰富的C#程序员同样具有很好的参考借鉴价值,需要的朋友可以参考下...2020-06-25