一路问情个人家园一路问情游戏攻略一路问情综合信息查询一路问情软件游戏外挂下载一路问情高清在线一路问情d21.09暗黑战网关于一路问情团队
打印

[经验] PHP问题二

PHP问题二

17:我想知道他是通过哪个网站连接到本页
复制内容到剪贴板代码:
<?php
//必须通过超级连接进入才有输出
Echo $_SERVER['HTTP_REFERER'];
?>
18:数据放入数据库和取出来显示在页面需要注意什么

入库时
$str=addslashes($str);
$sql="insert into `tab` (`content`) values('$str')";
出库时
$str=stripslashes($str);
显示时
$str=htmlspecialchars(nl2br($str)) ;

19:如何读取当前地址栏信息
复制内容到剪贴板代码:
<?php
$s="http://{$_SERVER['HTTP_HOST']}:{$_SERVER["SERVER_PORT"]}{$_SERVER['SCRIPT_NAME']}";
$se='';
foreach ($_GET as $key => $value) {     
$se.=$key."=".$value."&";     
}   
$se=Preg_Replace("/(.*)&$/","$1",$se);
$se?$se="?".$se:"";
echo   $s."?$se";
?>  
20:我点击后退按钮,为什么之前填写的东西不见

这是因为你使用了session.
解决办法:
复制内容到剪贴板代码:
<?php
session_cache_limiter('private, must-revalidate');
session_start();
...........
..........
?>
21:怎么在图片里显示IP地址
复制内容到剪贴板代码:
<?
  Header("Content-type: image/png");
  $img = ImageCreate(180,50);
  $ip = $_SERVER['REMOTE_ADDR'];
  ImageColorTransparent($img,$bgcolor);
  $bgColor = ImageColorAllocate($img, 0x2c,0x6D,0xAF); // 背景颜色
  $shadow = ImageColorAllocate($img, 250,0,0);    // 阴影颜色
  $textColor = ImageColorAllocate($img, oxff,oxff,oxff);       // 字体颜色
  ImageTTFText($img,10,0,78,30,$shadow,"d:/windows/fonts/Tahoma.ttf",$ip); //显示背景
  ImageTTFText($img,10,0,25,28,$textColor,"d:/windows/fonts/Tahoma.ttf","your ip is".$ip); // 显示IP
  ImagePng($img);
  imagecreatefrompng($img);
  ImageDestroy($img);
?>
22:如何取得用户的真实IP
复制内容到剪贴板代码:
<?
function iptype1 () {
if (getenv("HTTP_CLIENT_IP")) {
   return getenv("HTTP_CLIENT_IP");
}
else {
   return "none";
}
}
function iptype2 () {
if (getenv("HTTP_X_FORWARDED_FOR")) {
   return getenv("HTTP_X_FORWARDED_FOR");
}
else {
   return "none";
}
}
function iptype3 () {
if (getenv("REMOTE_ADDR")) {
   return getenv("REMOTE_ADDR");
}
else {
   return "none";
}
}
function ip() {
$ip1 = iptype1();
  $ip2 = iptype2();
$ip3 = iptype3();
if (isset($ip1) && $ip1 != "none" && $ip1 != "unknown") {
   return $ip1;
}
elseif (isset($ip2) && $ip2 != "none" && $ip2 != "unknown") {
   return $ip2;
}
elseif (isset($ip3) && $ip3 != "none" && $ip3 != "unknown") {
   return $ip3;
}   
  else {
  return "none";
}
}

Echo ip();
?>  
23:如何从数据库读取三天内的所有记录

首先表格里要有一个DATETIME字段记录时间,
格式为'2003-7-15 16:50:00'

SELECT * FROM `xltxlm` WHERE TO_DAYS(NOW()) - TO_DAYS(`date`) <= 3;

24:如何远程链接Mysql数据库

在增加用户的mysql表里有一个host字段,修改为"%",或者指定允许连接的ip地址,这样,你就可以远程调用了。

$link=mysql_connect("192.168.1.80:3306","root","");

25:用Apache后,主页出现乱码

方法一:
AddDefaultCharset ISO-8859-1 改为 AddDefaultCharset off

方法二:
AddDefaultCharset GB2312

26:为什么单引号,双引号在接受页面变成(\'\")

解决方法:
方法一:在php.ini中设置:magic_quotes_gpc = Off
方法二: $str=stripcslashes($str)


27:怎么让程序一直运行下去,而不是超过30秒就停止

set_time_limit(60)//最长运行时间一分钟
set_time_limit(0)//运行到程序自己结束,或手动停止

28:计算当前在线人数

例子一:用文本实现
复制内容到剪贴板代码:
<?php
//首先你要有读写文件的权限
//本程序可以直接运行,第一次报错,以后就可以
  $online_log = "count.dat"; //保存人数的文件,
  $timeout = 30;//30秒内没动作者,认为掉线
  $entries = file($online_log);

  $temp = array();
  
  for ($i=0;$i<count($entries);$i++) {
   $entry = explode(",",trim($entries[$i]));
   if (($entry[0] != getenv('REMOTE_ADDR')) && ($entry[1] > time())) {
    array_push($temp,$entry[0].",".$entry[1]."\n"); //取出其他浏览者的信息,并去掉超时者,保存进$temp
   }
  }

   array_push($temp,getenv('REMOTE_ADDR').",".(time() + ($timeout))."\n"); //更新浏览者的时间
  $users_online = count($temp); //计算在线人数

  $entries = implode("",$temp);
  //写入文件
  $fp = fopen($online_log,"w");
   flock($fp,LOCK_EX); //flock() 不能在NFS以及其他的一些网络文件系统中正常工作
   fputs($fp,$entries);
   flock($fp,LOCK_UN);
   fclose($fp);

   echo "当前有".$users_online."人在线";

?>  
例子二:
用数据库实现在线用户
复制内容到剪贴板代码:
<?
#
# Author: Marco(hkfuk)
#
# Contact: Crazy_Marco@msn.com
#
$host="localhost";//mysql的host
$user="root";//mysql的用戶名稱
$pw="";//mysql的密碼
$db="";//mysql資料庫名稱
$update_time="30";//更新的頻率---秒数
session_start();
if(!$_SESSION['name'])session_register("name");
############################################
$con=mysql_connect($host,$user,$pw)or die("不可以連接資料庫");
$now=time();
mysql_select_db($db,$con)or die("錯誤的資料庫$db");
if(!empty($name)){//如果用戶已經登入了
$query=mysql_query("select count(username) from online_list where username='$name'",$con);//查詢在線到表是否已經有用戶的名稱
$result=mysql_result($query,0);//查詢的結果
if($result!=0){//如果用戶已經在在線列表了
@mysql_query("update online_list set second_time='$now' where username='$name'",$con);//更新用戶的最後在線時間
}else{//如果用戶已經不在在線列表
@mysql_query("insert into online_list(username,userip,online_time,second_time)values('$name','$REMOTE_ADDR','$now','$now')",$con);//新增一個用戶到在線列表
}
}

else{//如果用戶沒有登入
$query=mysql_query("select count(userip) from online_list where userip='$REMOTE_ADDR'",$con);//查詢在線到表是否已經有訪客的ip 地址
$result=mysql_result($query,0);//查詢的結果
if($result!=0){//如果訪客的ip地址已經在在線列表了
@mysql_query("update online_list set second_time='$now' where userip='$REMOTE_ADDR'",$con);//更新訪客的最後在線時間
}else{//如果用戶列表沒有訪客的ip地址
@mysql_query("insert into online_list(username,userip,online_time,second_time)values('訪客','$REMOTE_ADDR','$now','$now')",$con);//新增一個訪客到在線列表
}
}
$del_time=$now-$update_time;
@mysql_query("delete from online_list where second_time<$del_time",$con);//刪除在$update_time秒內沒有動作的用戶
?>
29:什么是模板,怎么用

这里有几篇关于模板的文章

我用的是phplib模板
下面是其中几个函数的使用

$T->Set_File("随便定义","模板文件.tpl");

$T->Set_Block("在set_file中定义的","<!-- 来自模板 -->","随便定义");

$T->Parse("在Set_Block中定义的","<!-- 来自模板 -->",true);

$T->Parse("随便输出结果","在Set_File中定义的");

设置循环格式为:

<!--(多于一个空格) BEGIN $handle(多于一个空格)-->

如何将模板生成静态网页
复制内容到剪贴板代码:
<?php
//这里使用phplib模板
    ............
    ............
    $tpl->parse("output","html");
    $output = $tpl->get("output");// $output 为整个网页内容


    function wfile($file,$content,$mode='w') {
    $oldmask = umask(0);
    $fp = fopen($file, $mode);
    if (!$fp) return false;
    fwrite($fp,$content);
    fclose($fp);
    umask($oldmask);
    return true;
}
   // 写到文件里
    Wfile($FILE,$output);
    header("location:$FILE");//重定向到生成的网页
}
?>  
30:怎么用php解释字符

比如:输入2+2*(1+2),自动输出8
可以用eval函数
复制内容到剪贴板代码:
<form method=post action="">
<input type="text" name="str"><input type="submit">
</form>
<?php
$str=$_POST['str'];
eval("\$o=$str;");
Echo   "$o";
?>
另外,用此函数必须特别小心!!
如果有人输入format: d:会是什么结果?

TOP