分类存档: PHP

使用php访问wordpress博客的数据库并在htm网页中以超链接显示博客的更新内容

我想在我的主页上显示我的博客更新,实现如下的效果

当然用dreamwaver点几下按钮就可以华丽的搞定,但我的网页使用seamonkey做的很简陋,所以打算用php搞定。我的博客是基于wordpress的,wordpress一般使用mysql数据库,wordpress的mysql数据库的wp_posts表中的post_title,guid,post_date分别记录了博客记录的标题、url地址、更新日期信息,使用php访问该数据库查询博客的更新记录,然后显示就可以了。

将下面这段代码插入htm网页就能以超链接显示博客更新了,注意替换wordpress对应的数据库名、用户名、密码、编码(我的博客数据库用的是utf8)等。

<script language="php">

$dbh=@mysql_connect("localhost:3306","user_name","passwd");
if(!$dbh){die("error");}
@mysql_select_db("wordpress_DB",$dbh);
$q="SELECT post_title,guid,post_date FROM wp_posts where post_status='publish' order by post_date desc limit 0,7 ;";
mysql_query("SET NAMES 'utf8'",$dbh);
$rs=mysql_query($q,$dbh);
while($row=mysql_fetch_object($rs))echo "<a href=\"$row->guid\">[$row->post_date] $row->post_title</a><br/>";

//有人说用下面这个语句速度更快

//while($row=mysql_fetch_array($rs))echo "<a href=\"$row[guid]\">[$row[post_date]] $row[post_title]</a><br/>";

@mysql_close($dbh);
</script>

 

PHP下随机显示图片

使用如下代码:
<?php
$imgs=array('0.jpg','1.jpg','2.gif');
$img=$imgs[array_rand($imgs)];
echo "<img src='./images/$img'>";
?>

网页标签上的图标添加方法

在网页<head></head>标签之间插入这样的代码就行了
<link rel="Shortcut Icon" href="tootoogo.ico"><!--网页标题显示-->
<link rel="Bookmark" href="tootoogo.ico"><!--被收藏后,收藏夹显示-->

注意:ico文件必须是专门制作的,其他图片格式更改扩展名为ico是不行的

用PHP制作的网站访问计数器,可以显示访问者IP所在地

上次在《自己用PHP做个简单的网站访问计数器》作了个简单的网站访问计数器,效果良好,于是,再一次花了些功夫搜了些代码,把功能扩充一下,主要是增加了显示访问者ip所在地的功能。该功能使用了”纯真IP地址数据库“中的文件“qqwry.dat",现获得访问者的ip然后在该数据库中进行查询,并显示访问者的ip所在地。将下面的代码,插入到html格式的主页后,将主页的扩展名改为php就可以了。

注意:

0. 服务器要支持php。

1. 在主页目录下建立visitor_count.txt文件,修改其所有者为httpd服务的所有者,并修改其权限为可读写,初始时向该文件写入字符0。

2. 如果主页采用的是GBK、GB2312编码,那么就去掉代码中的两个iconv转换语句以及开头的

header("Content-Type:text/html;Charset=UTF-8");

3. 如果页面采用的是utf8那么就要确保安装了iconv支持,且php.ini中的选项extension=iconv.so要启用(linux下是iconv.so,win下应该是个dll文件)。因为,qqwry.dat中的数据不是utf8编码,直接显示会出现乱码,所以用iconv将查到的归属地数据转换为了utf8后再进行显示。

4. 从qqwry.dat中查询ip归属地的代码使我从网上搜的,呵呵,有不明白的地方不要问我,我只是初步涉及php,仅仅作了个计数器而已,没有深入研究。

5. 一定要有qqwry.data这个文件才可以显示ip地址归属地,且该文件要放置在,主页跟目录下,可以搜索"纯真ip地址数据库"下载qqwry.dat,也可以从我的网站下载,下载地址:qqwry.dat

6. 复制代码地时候有可能出现英文引号(半角)变为中文引号(全角)的情况记得,要改回半角。

代码:

<script language="php">

header("Content-Type:text/html;Charset=UTF-8");
//jjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjj
//////////////////////////define query function
define('__QQWRY__' , dirname(__FILE__)."/qqwry.dat");
class QQWry{
var $StartIP=0;
var $EndIP=0;
var $Country='';
var $Local='';
var $CountryFlag=0;
var $fp;
var $FirstStartIp=0;
var $LastStartIp=0;
var $EndIpOff=0 ;
function getStartIp($RecNo){
$offset=$this->FirstStartIp+$RecNo * 7 ;
@fseek($this->fp,$offset,SEEK_SET) ;
$buf=fread($this->fp ,7) ;
$this->EndIpOff=ord($buf[4]) + (ord($buf[5])*256) + (ord($buf[6])* 256*256);
$this->StartIp=ord($buf[0]) + (ord($buf[1])*256) + (ord($buf[2])*256*256) + (ord($buf[3])*256*256*256);
return $this->StartIp;
}
function getEndIp(){
@fseek ( $this->fp , $this->EndIpOff , SEEK_SET ) ;
$buf=fread ( $this->fp , 5 ) ;
$this->EndIp=ord($buf[0]) + (ord($buf[1])*256) + (ord($buf[2])*256*256) + (ord($buf[3])*256*256*256);
$this->CountryFlag=ord ( $buf[4] ) ;
return $this->EndIp ;
}
function getCountry(){
switch ( $this->CountryFlag ) {
case 1:
case 2:
$this->Country=$this->getFlagStr ( $this->EndIpOff+4) ;
//echo sprintf('EndIpOffset=(%x)',$this->EndIpOff );
$this->Local=( 1 == $this->CountryFlag )? '' : $this->getFlagStr ( $this->EndIpOff+8);
break ;
default :
$this->Country=$this->getFlagStr ($this->EndIpOff+4) ;
$this->Local=$this->getFlagStr ( ftell ( $this->fp )) ;
}
}
function getFlagStr ($offset){
$flag=0 ;
while(1){
@fseek($this->fp ,$offset,SEEK_SET) ;
$flag=ord(fgetc($this->fp ) ) ;
if ( $flag == 1 || $flag == 2 ) {
$buf=fread ($this->fp , 3 ) ;
if ($flag==2){
$this->CountryFlag=2;
$this->EndIpOff=$offset - 4 ;
}
$offset=ord($buf[0]) + (ord($buf[1])*256) + (ord($buf[2])* 256*256);
}
else{
break ;
}
}
if($offset<12)
return '';
@fseek($this->fp , $offset , SEEK_SET ) ;

return $this->getStr();
}
function getStr ( )
{
$str='' ;
while ( 1 ) {
$c=fgetc ( $this->fp ) ;
if(ord($c[0])== 0 )
break ;
$str.= $c ;
}
return $str ;
}
function qqwry ($dotip='') {
if( !is_string($dotip) || $dotip==''){return;}
if(preg_match("/^127/",$dotip)){$this->Country="本地网络";return ;}
elseif(preg_match("/^192/",$dotip)) {$this->Country="局域网";return ;}

$nRet;
$ip=$this->IpToInt ( $dotip );
$this->fp= fopen(__QQWRY__, "rb");
if ($this->fp == NULL) {
$szLocal= "OpenFileError";
return 1;
}
@fseek ( $this->fp , 0 , SEEK_SET ) ;
$buf=fread ( $this->fp , 8 ) ;
$this->FirstStartIp=ord($buf[0]) + (ord($buf[1])*256) + (ord($buf[2])*256*256) + (ord($buf[3])*256*256*256);
$this->LastStartIp=ord($buf[4]) + (ord($buf[5])*256) + (ord($buf[6])*256*256) + (ord($buf[7])*256*256*256);
$RecordCount= floor( ( $this->LastStartIp - $this->FirstStartIp ) / 7);
if ($RecordCount <= 1){
$this->Country="FileDataError";
fclose($this->fp) ;
return 2 ;
}
$RangB= 0;
$RangE= $RecordCount;
while ($RangB < $RangE-1)
{
$RecNo= floor(($RangB + $RangE) / 2);
$this->getStartIp ( $RecNo ) ;

if ( $ip == $this->StartIp )
{
$RangB=$RecNo ;
break ;
}
if ($ip>$this->StartIp)
$RangB= $RecNo;
else
$RangE= $RecNo;
}
$this->getStartIp ( $RangB ) ;
$this->getEndIp ( ) ;

if ( ( $this->StartIp <= $ip ) && ( $this->EndIp >= $ip ) ){
$nRet=0 ;
$this->getCountry ( ) ;
$this->Local=str_replace("(我们一定要解放台湾!!!)", "", $this->Local);
}
else{
$nRet=3 ;
$this->Country='未知' ;
$this->Local='' ;
}
fclose ( $this->fp );
$this->Country=preg_replace("/(CZ88.NET)|(纯真网络)/","局域网/未知",$this->Country);
$this->Local=preg_replace("/(CZ88.NET)|(纯真网络)/","局域网/未知",$this->Local);
return $nRet ;
}
function IpToInt($Ip) {
$array=explode('.',$Ip);
$Int=($array[0] * 256*256*256) + ($array[1]*256*256) + ($array[2]*256) + $array[3];
return $Int;
}
}
function GetIP(){//获取IP
return $_SERVER[REMOTE_ADDR]?$_SERVER[REMOTE_ADDR]:$GLOBALS[HTTP_SERVER_VARS][REMOTE_ADDR];
}
////////////////////query function ends
////////////////////begin counter
$fp=fopen("./visitor_count.txt",'r+');
if (!$fp){ echo'file visitor_count.txt is missing!';  }
else{
$count=fgets($fp);$count=$count+1;fseek($fp,0);
if(fwrite($fp,$count)==FALSE)echo 'Can not wirte to visitor_count.txt'    ;
fclose($fp);
echo 'Visitor No. ';
echo $count;
$iipp = $_SERVER["REMOTE_ADDR"];
echo ' from ';
echo $iipp;
$QQWry=new QQWry;
$ifErr=$QQWry->QQWry($iipp);
echo '(';
$ip1=$QQWry->Country;
$ip2=$QQWry->Local;
$ip1=iconv("GBK","UTF-8",$ip1);
$ip2=iconv("GBK","UTF-8",$ip2);
echo $ip1;
echo $ip2;
//echo "$QQWry->Country$QQWry->Local";
echo ')';
echo ', logged at ';

date_default_timezone_set('Asia/Chongqing');
echo date('Y-m-d H:i:s');

}
//jjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjj
</script>

自己用PHP做个简单的网站访问计数器

自己作了个网站,如果用别的人网站访问计数器,需要在自己的主页面上嵌入别人服务器上的计数器链接,有时会造成网页打开速度缓慢,于是打算自己用php做 个简单的计数器。原理很简单,服务器上建立个count.txt文件,存储访问数量,每当网页打开,php就读取该文件中记录的数字,然后加一,并显示在 网页上就可以了。要实现该功能,需要用php读写文件、显示数字。于是,搜集了如下资料:

PHP读写文件

PHP读取文件可以读取当前服务器或远程服务器中的文件。其步骤是:打开文件、读文件和关闭文件。

1,PHP如何打开文件

使用PHP函数fopen()打开一个文件,fopen()一般使用2个参数表示打开文件的路径和文件模式。比如:

$fp=fopen("../cnbruce.txt",'w');

其中 "../cnbruce.txt" 就表示打开的cnbruce.txt文件的路径(相对当前执行程序文件的路径),'w'表示以只写的方式打开该文本文件。

附录:fopen()函数的文件模式总结

r    只读——读模式,打开文件,从文件头开始读
r+    可读可写方式打开文件,从文件头开始读写
w    只写——写方式打开文件,同时把该文件内容清空,把文件指针指向文件开始处。如果该文件已经存在,将删除文件已有内容;如果该文件不存在,则建立该文件
w+    可读可写方式打开文件,同时把该文件内容清空,把文件指针指向文件开始处。如果该文件不存在,则建立该文件
a    追加    以只写方式打开文件,把文件指针指向文件末尾处。如果该文件不存在,则建立该文件
a+    追加    以可读可写方式打开文件,把文件指针指向文件末尾处。如果该文件不存在,则建立该文件
b    二进制    用于于其他模式进行连接。建议使用该选项,以获得更大程度的可移植性

注意,如果fopen()函数调用失败,函数将返回false。否则返回指针数据。所以一般在打开了文件后\读写文件前需要检测下文件是否存在。

<?php
@ $fp=fopen("http://www.cnbruce.com/abc123",'w');
if (!$fp)
{
echo'文件不存在';
exit;
}
?>

其中@符号表示PHP将抑制所有由当前函数调用产生的错误。

2,PHP如何读文件

在PHP打开了文件之后就需要对文件进行读取,一般是使用fgets()函数

该函数可以从文件中每次读取一行内容,其不断读入数据,值到遇到本行的换行符,或者全文的结束符号EOF。

介于fgets()函数只能读取一行数据,所以若需要读取文件的所有数据,须使用循环语句来完成。比如:

while (!feof($fp))
{
$bruce=fgets($fp);
echo $bruce;
}

其中feof()函数是用来检测文件是否结束的。该函数唯一参数就是文件指针(即$fp对应打开的文件)。

当然,在PHP中还可以使用readfile()函数一次读取整个文件。该函数包括了打开文件、读取文件并输出到浏览器中和关闭文件。比如:

<?php
$bruce=readfile("http://www.cnbruce.com");
echo $bruce;
?>

3,PHP如何关闭文件

使用函数fclose()就可以将文件关闭。

二,PHP如何写数据到文件

与PHP读取文件一样,PHP写入文件也需要:打开文件、写入数据和关闭文件。打开和关闭文件的方法上面已经说明,那PHP中写入数据到文件是怎样的呢。

使用fwrite()函数,比如fwrite(文件路径,写入内容)
<?php
$bruce=fopen("http://www.cnbruce.com/","r");
if(!$bruce)
{
echo'文件不存在';
exit;
}
while (!feof($bruce))
{
$rose=fgets($bruce);
$james=fopen("index.htm","a");
fwrite($james,$rose);
fclose($james);
}
fclose($bruce);
?>
<a href="index.htm">将cnbruce.com的内容生成了本地文件</a>

其他有用的文件函数:

file_exists():查看文件是否存在,返回布尔值
filesize():查看文件大小,可直接echo输出
unlink():删除文件,注意PHP中没有delete函数。

获取用户的IP:

$iipp = $_SERVER["REMOTE_ADDR"];

计数器实现的代码:

<script language="php">
$fp=fopen("./visitor_count.txt",'r+');
if (!$fp){ echo'file visitor_count.txt is missing!';  }
else{
$count=fgets($fp);$count=$count+1;fseek($fp,0);
if(fwrite($fp,$count)==FALSE)echo 'Can not wirte to visitor_count.txt'    ;

$iipp = $_SERVER["REMOTE_ADDR"];

echo ' from ';

echo $iipp;

echo ', logged at ';

date_default_timezone_set('Asia/Chongqing');
echo date('Y-m-d H:i:s');
fclose($fp);echo 'Visitor No. ';echo $count;
}
</script>

将代码加到html格式的主页上,并修改主页扩展名为php,在主页目录下建立visitor_count.txt文件,修改其所有者为httpd服务的所有者,并修改其权限为可读写,初始时向该文件写入字符0。

注意:

要求服务器支持php

复制代码地时候有可能出现英文引号(半角)变为中文引号(全角)的情况记得,要改回半角。

第 1 页,共 1 页1