当前位置:  编程技术>php
本页文章导读:
    ▪php 获取本机外网/公网IP的代码       大家一般都是用$_SERVER['REMOTE_ADDR']来获取用户IP, 但是如果使用了反向代理的,HTTP头中REMOTE_ADDR就不是用户的地址,反而是上一级代理的地址了。 经过我的研究有两种方法来获取用户的真实.........
    ▪php 仿Comsenz安装效果代码打包提供下载       最终的效果如下: step.inc.php 安装步骤效果类: 代码如下: /** * step.inc.php 安装步骤效果类 * * 从Comsenz产品的数据表安装效果中提取出主要代码,以供大家学习 * @author tianxin * @version 1.0.0 * .........
    ▪php ob_flush,flush在ie中缓冲无效的解决方法       PHP程序的缓冲,而不论PHP执行在何种情况下(CGI ,web服务器等等)。该函数将当前为止程序的所有输出发送到用户的浏览器。 flush() 函数不会对服务器或客户端浏览器的缓存模式产生影响.........

[1]php 获取本机外网/公网IP的代码
    来源: 互联网  发布时间: 2013-11-30
大家一般都是用$_SERVER['REMOTE_ADDR']来获取用户IP,

但是如果使用了反向代理的,HTTP头中REMOTE_ADDR就不是用户的地址,反而是上一级代理的地址了。

经过我的研究有两种方法来获取用户的真实外网IP。


方法一:curl
代码如下:

function get_onlineip() {
$ch = curl_init('http://www.ip138.com/ip2city.asp');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$a = curl_exec($ch);
preg_match('/\[(.*)\]/', $a, $ip);
return $ip[1];
}



方法二:$_SERVER['HTTP_X_FORWARDED_FOR']来获取相应的地址
代码如下:

function get_onlineip() {
$onlineip = '';
if(getenv('HTTP_CLIENT_IP') && strcasecmp(getenv('HTTP_CLIENT_IP'), 'unknown')) {
$onlineip = getenv('HTTP_CLIENT_IP');
} elseif(getenv('HTTP_X_FORWARDED_FOR') && strcasecmp(getenv('HTTP_X_FORWARDED_FOR'), 'unknown')) {
$onlineip = getenv('HTTP_X_FORWARDED_FOR');
} elseif(getenv('REMOTE_ADDR') && strcasecmp(getenv('REMOTE_ADDR'), 'unknown')) {
$onlineip = getenv('REMOTE_ADDR');
} elseif(isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], 'unknown')) {
$onlineip = $_SERVER['REMOTE_ADDR'];
}
return $onlineip;
}

    
[2]php 仿Comsenz安装效果代码打包提供下载
    来源: 互联网  发布时间: 2013-11-30
最终的效果如下:

step.inc.php 安装步骤效果类:

代码如下:

/**
* step.inc.php 安装步骤效果类 *
* 从Comsenz产品的数据表安装效果中提取出主要代码,以供大家学习
* @author tianxin
* @version 1.0.0 *
*/
class StepClass {
function show_header() {
define('SHOW_HEADER', TRUE);
$step = 1;
$version = 'beta1.0';
$release = '20100223';
$install_lang = '简体中文UTF8版';
$title = '仿Comsenz安装';
$charset = 'uft-8';
echo <<<EOT
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=$charset" />
<title>$title</title>
<link rel="stylesheet" href="/blog_article/style.css" type="text/css" media="all" />
<script type="text/javascript">
function $(id) {
return document.getElementById(id);
}
function showmessage(message) {
$('notice').value += message + "\\r\\n";
}
</script>
<meta content="Comsenz Inc." name="Copyright" />
</head>
<div >
<div >
<h1>$title</h1>
<span>$version $install_lang $release</span>
EOT;
$step > 0 && $this->show_step($step);
}
function show_step($step) {
$laststep = 4;
$title = '仿Comsenz安装';
$comment = '正在执行操作';
$stepclass = array();
for($i = 1; $i <= $laststep; $i++) {
$stepclass[$i] = $i == $step ? 'current' : ($i < $step ? '' : 'unactivated');
}
$stepclass[$laststep] .= ' last';
echo <<<EOT
<div >
<h2>$title</h2>
<p>$comment</p>
</div>
<div >
<ul>
<li >1</li>
<li >2</li>
<li >3</li>
<li >4</li>
</ul>
<div ></div>
</div>
</div>
<div >
EOT;
}
function show_install() {
?>
<script type="text/javascript">
function showmessage(message) {
document.getElementById('notice').value += message + "\r\n";
}
function initinput() {
window.location='http://www.';
}
</script>
<div >
<div ><textarea name="notice" readonly="readonly" id="notice"></textarea></div>
<div >
<input type="button" name="submit" value="正在执行……" disabled id="laststep" onclick="initinput()">
</div>
<?php
}
function runquery() {
for($i=1;$i<=15;$i++)
{
$this->showjsmessage('执行操作'.' '.$i.' ... '.'成功');
//模拟每执行完一个动作的延时
sleep(1);
}
}
function showjsmessage($message) {
echo '<script type="text/javascript">showmessage(\''.addslashes($message).' \');</script>'."\r\n";
flush();
ob_flush();
}
function show_footer($quit = true) {
echo <<<EOT
<div >©2001 - 2010 <a href="http://www./">甜心</a> 瑶瑶说杀很大.</div>
</div>
</div>
</body>
</html>
EOT;
$quit && exit();
}
}

调用方法:
代码如下:

header('Content-Type: text/html; charset=utf-8');
include('step.inc.php');
$step=new StepClass();
//显示页面头部
$step->show_header();
//显示操作进度
$step->show_install();
//运行操作
$step->runquery();
echo '<script type="text/javascript">document.getElementById("laststep").disabled=false;document.getElementById("laststep").value = \'执行完所有操作,进入下一步\';</script>'."\r\n";
//显示页面尾部
$step->show_footer();

完整的demo:stepdemo.rar

    
[3]php ob_flush,flush在ie中缓冲无效的解决方法
    来源: 互联网  发布时间: 2013-11-30
PHP程序的缓冲,而不论PHP执行在何种情况下(CGI ,web服务器等等)。该函数将当前为止程序的所有输出发送到用户的浏览器。
flush() 函数不会对服务器或客户端浏览器的缓存模式产生影响。因此,必须同时使用 ob_flush() 和flush() 函数来刷新输出缓冲。
个别web服务器程序,特别是Win32下的web服务器程序,在发送结果到浏览器之前,仍然会缓存脚本的输出,直到程序结束为止
自己写了个小例子,想在页面每隔一秒输出一个数字。

按照网上的代码:
代码如下:

ob_end_clean();
for ($i=10; $i>0; $i--)
{
echo $i;
flush();
sleep(1);
}


或者:
代码如下:

for ($i=10; $i>0; $i--)
{
echo $i;
ob_flush();
flush();
sleep(1);
}


我发现在火狐里面生效,但在IE里不起作用,每次都是10个数字一起输出,这说明缓冲没有生效。

我又开始调整php.ini里面的output_buffering的设置,重启apache,依旧无效。

然后我看到了一段话:

一些版本的 Microsoft Internet Explorer 只有当接受到的256个字节以后才开始显示该页面,所以必须发送一些额外的空格来让这些浏览器显示页面内容。

罪恶的IE浏览器,问题就是TMD的多!

然后我修改了下程序,便正常了:
代码如下:

echo str_pad('',4096);
for ($i = 0; $i < 10; $i++) {
echo $i;
ob_flush();
flush();
sleep(1);
}

代码如下:

//ob_end_flush();//IE8下没起作用
echo str_pad(" ", 256);//IE需要接受到256个字节之后才开始显示

for($i=0;$i<18;$i++) {
echo $i;
flush();
sleep(1);
}

    
最新技术文章:
▪PHP函数microtime()时间戳的定义与用法
▪PHP单一入口之apache配置内容
▪PHP数组排序方法总结(收藏)
▪php数组排序方法大全(脚本学堂整理奉献)
▪php数组排序的几个函数(附实例)
▪php二维数组排序(实例)
▪php根据键值对二维数组排序的小例子
▪php验证码(附截图)
▪php数组长度的获取方法(三个实例)
▪php获取数组长度的方法举例
▪判断php数组维度(php数组长度)的方法
▪php获取图片的exif信息的示例代码
▪PHP 数组key长度对性能的影响实例分析
▪php函数指定默认值的方法示例
▪php提交表单到当前页面、提交表单后页面重定...
▪php四舍五入的三种实现方法
▪php获得数组长度(元素个数)的方法
▪php日期函数的简单示例代码
▪php数学函数的简单示例代码
▪php字符串函数的简单示例代码
▪php文件下载代码(多浏览器兼容、支持中文文...
▪php实现文件下载、支持中文文件名的示例代码...
▪php文件下载(防止中文文件名乱码)的示例代码
▪解决PHP文件下载时中文文件名乱码的问题
▪php数组去重(一维、二维数组去重)的简单示例
▪php小数点后取两位的三种实现方法
▪php Redis 队列服务的简单示例
▪PHP导出excel时数字变为科学计数的解决方法
▪PHP数组根据值获取Key的简单示例
▪php数组去重的函数代码示例
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3