存档

‘PHP’ 分类的存档

PHP数组适用unset删除重建索引

2012年1月24日 没有评论

1.unset删除元素后不会重建数组的索引。

array_values()可以实现索引重建
阅读全文...

分类: PHP 标签:

ThinkPHP表单令牌验证功能,表单令牌错误

2011年11月28日 没有评论

用thinkphp编写的带有form表单的页面,如果你打开两次同一个表单,以第一次找开的提交信息,他就会提示你“表单令牌错误”的信息!

解决办法:
阅读全文...

分类: PHP 标签:

PHP如何处理jquery post过来的$('#form').serialize()数据

2011年11月28日 没有评论

如果你使用jquery的form表单中serialize提交数据到后台,例如:$('#form').serialize()。在php处理端你不用任何处理,跟普通的from提交一样,使用$_GET[‘varname’]或$_POST[‘varname’]就能取到数据。

 

jquery里form的serialize实际是只是把表单中的数据组装成"varname=val&var2=val2"这种样子,看到这个你应该知道PHP端不需要处理了吧。

分类: PHP 标签: ,

PHP获取操作系统和浏览器信息

2011年11月26日 没有评论
 //以下代码实现从客户端获取IP,操作系统,浏览器的信息
class clientGetObj //类
{
 function getBrowse() //取浏览器版本函数
 {
  global $_SERVER;

  if(strpos($_SERVER["HTTP_USER_AGENT"],"MSIE 8.0"))
  return "Internet Explorer 8.0";
  else if(strpos($_SERVER["HTTP_USER_AGENT"],"MSIE 7.0"))
  return "Internet Explorer 7.0";
  else if(strpos($_SERVER["HTTP_USER_AGENT"],"MSIE 6.0"))
  return "Internet Explorer 6.0";
  else if(strpos($_SERVER["HTTP_USER_AGENT"],"Firefox/3"))
  return "Firefox 3";
  else if(strpos($_SERVER["HTTP_USER_AGENT"],"Firefox/2"))
  return "Firefox 2";
  else if(strpos($_SERVER["HTTP_USER_AGENT"],"Chrome"))
  return "Google Chrome";
  else if(strpos($_SERVER["HTTP_USER_AGENT"],"Safari"))
  return "Safari";
  else if(strpos($_SERVER["HTTP_USER_AGENT"],"Opera"))
  return "Opera";
  else return "未知";

 }
 function getIP () //取IP函数
 {
  global $_SERVER;
  if (getenv('HTTP_CLIENT_IP')) {
   $ip = getenv('HTTP_CLIENT_IP');
  } else if (getenv('HTTP_X_FORWARDED_FOR')) {
   $ip = getenv('HTTP_X_FORWARDED_FOR');
  } else if (getenv('REMOTE_ADDR')) {
   $ip = getenv('REMOTE_ADDR');
  } else {
   $ip = $_SERVER['REMOTE_ADDR'];
  }
  return $ip;
 }

 function getOS () //取操作系统类型函数
 {
  global $_SERVER;
  $agent = $_SERVER['HTTP_USER_AGENT'];
  $os = false;
  if (eregi('win', $agent) && strpos($agent, '95')){
   $os = 'Windows 95';
  }
  else if (eregi('win 9x', $agent) && strpos($agent, '4.90')){
   $os = 'Windows ME';
  }
  else if (eregi('win', $agent) && ereg('98', $agent)){
   $os = 'Windows 98';
  }
  else if (eregi('win', $agent) && eregi('nt 5.1', $agent)){
   $os = 'Windows XP';
  }
  else if (eregi('win', $agent) && eregi('nt 5', $agent)){
   $os = 'Windows 2000';
  }
  else if (eregi('win', $agent) && eregi('nt', $agent)){
   $os = 'Windows NT';
  }
  else if (eregi('win', $agent) && ereg('32', $agent)){
   $os = 'Windows 32';
  }
  else if (eregi('linux', $agent)){
   $os = 'Linux';
  }
  else if (eregi('unix', $agent)){
   $os = 'Unix';
  }
  else if (eregi('sun', $agent) && eregi('os', $agent)){
   $os = 'SunOS';
  }
  else if (eregi('ibm', $agent) && eregi('os', $agent)){
   $os = 'IBM OS/2';
  }
  else if (eregi('Mac', $agent) && eregi('PC', $agent)){
   $os = 'Macintosh';
  }
  else if (eregi('PowerPC', $agent)){
   $os = 'PowerPC';
  }
  else if (eregi('AIX', $agent)){
   $os = 'AIX';
  }
  else if (eregi('HPUX', $agent)){
   $os = 'HPUX';
  }
  else if (eregi('NetBSD', $agent)){
   $os = 'NetBSD';
  }
  else if (eregi('BSD', $agent)){
   $os = 'BSD';
  }
  else if (ereg('OSF1', $agent)){
   $os = 'OSF1';
  }
  else if (ereg('IRIX', $agent)){
   $os = 'IRIX';
  }
  else if (eregi('FreeBSD', $agent)){
   $os = 'FreeBSD';
  }
  else if (eregi('teleport', $agent)){
   $os = 'teleport';
  }
  else if (eregi('flashget', $agent)){
   $os = 'flashget';
  }
  else if (eregi('webzip', $agent)){
   $os = 'webzip';
  }
  else if (eregi('offline', $agent)){
   $os = 'offline';
  }
  else {
   $os = 'Unknown';
  }
  return $os;
 }
}
分类: PHP 标签:

php 输出汉字png GD显示中文

2011年11月26日 没有评论

php输出图片可以适用GD组件来进行。

输出英文字母使用 imagestring — 水平地画一行字符串。

<?php
// 建立一幅 100X30 的图像
$im = imagecreate(100, 30);

// 白色背景和蓝色文本
$bg = imagecolorallocate($im, 255, 255, 255);
$textcolor = imagecolorallocate($im, 0, 0, 255);

// 把字符串写在图像左上角
imagestring($im, 5, 0, 0, "Hello world! ", $textcolor);

// 输出图像
header("Content-type: image/png");
imagepng($im);
?>

输出中文的时候就不行了,下面的代码就只能输出英文。

<?php
// 建立一幅 100X30 的图像
$im = imagecreate(100, 30);

// 白色背景和蓝色文本
$bg = imagecolorallocate($im, 255, 255, 255);
$textcolor = imagecolorallocate($im, 0, 0, 255);

// 把字符串写在图像左上角
imagestring($im, 5, 0, 0, "Hello world! 你好", $textcolor);

// 输出图像
header("Content-type: image/png");
imagepng($im);
?>

 

翻了下PHP手册,有时候手册是很强大的,就好比闲来无事翻字典,你会多认识好多字一样。

imagettftext — 用 TrueType 字体向图像写入文本,可以先导入中文字体在输出。

<?php
// Set the content-type
header("Content-type: image/png");

// Create the image
$im = imagecreatetruecolor(400, 30);

// Create some colors
$white = imagecolorallocate($im, 255, 255, 255);
$grey = imagecolorallocate($im, 128, 128, 128);
$black = imagecolorallocate($im, 0, 0, 0);
imagefilledrectangle($im, 0, 0, 399, 29, $white);

// The text to draw
$text = 'Testing...测试';
// Replace path by your own font path
$font = 'yh.ttf';

// Add some shadow to the text
imagettftext($im, 20, 0, 11, 21, $grey, $font, $text);

// Add the text
imagettftext($im, 20, 0, 10, 20, $black, $font, $text);

// Using imagepng() results in clearer text compared with imagejpeg()
imagepng($im);
imagedestroy($im);
?>

效果

 

但要保证php文件是以utf8格式保存的,不然会输出如下乱码,

本函数同时需要 GD 库和  FreeType 库。

原因应该是内部进行了utf8和gbk转码工作,等有机会我再细分析下。

分类: PHP 标签: ,

yahoo finance API f参数对照表

2011年11月25日 没有评论

1、通过API获取实时数据

请求地址

http://finance.yahoo.com/d/quotes.csv?s=<股票名称>&f=<数据列选项>

参数

  • s – 表示股票名称,多个股票之间使用英文加号分隔,如”XOM+BBDb.TO+JNJ+MSFT”,罗列了四个公司的股票:XOM, BBDb.TO, JNJ, MSFT。
  • f – 表示返回数据列,如”snd1l1yr”。更详细的参见下表

例如 汇率API

http://download.finance.yahoo.com/d/quotes.html?s=USDCNY=X&f=sl1d1t1ba&e=.html

2、通过API获取历史数据

请求地址

http://ichart.yahoo.com/table.csv?s=<string>&a=<int>&b=<int>&c=<int>&d=<int>&e=<int>&f=<int>&g=d&ignore=.csv

参数

  • s – 股票名称
  • a – 起始时间,月
  • b – 起始时间,日
  • c – 起始时间,年
  • d – 结束时间,月
  • e – 结束时间,日
  • f – 结束时间,年
  • g – 时间周期。Example: g=w, 表示周期是’周’。d->’日’(day), w->’周’(week),m->’月’(mouth),v->’dividends only’

一定注意月份参数,其值比真实数据-1。如需要9月数据,则写为08。

3、通过API获取深沪股票数据

雅虎的API是国际性的,支持查询国内沪深股市的数据,但代码稍微变动一下,如浦发银行的代号是:600000.SS。规则是:上海市场末尾加.ss,深圳市场末尾加.sz

a Ask a2 Average Daily Volume a5 Ask Size
b Bid b2 Ask (Real-time) b3 Bid (Real-time)
b4 Book Value b6 Bid Size c Change & Percent Change
c1 Change c3 Commission c6 Change (Real-time)
c8 After Hours Change (Real-time) d Dividend/Share d1 Last Trade Date
d2 Trade Date e Earnings/Share e1 Error Indication (returned for symbol changed / invalid)
e7 EPS Estimate Current Year e8 EPS Estimate Next Year e9 EPS Estimate Next Quarter
f6 Float Shares g Day’s Low h Day’s High
j 52-week Low k 52-week High g1 Holdings Gain Percent
g3 Annualized Gain g4 Holdings Gain g5 Holdings Gain Percent (Real-time)
g6 Holdings Gain (Real-time) i More Info i5 Order Book (Real-time)
j1 Market Capitalization j3 Market Cap (Real-time) j4 EBITDA
j5 Change From 52-week Low j6 Percent Change From 52-week Low k1 Last Trade (Real-time) With Time
k2 Change Percent (Real-time) k3 Last Trade Size k4 Change From 52-week High
k5 Percebt Change From 52-week High l Last Trade (With Time) l1 Last Trade (Price Only)
l2 High Limit l3 Low Limit m Day’s Range
m2 Day’s Range (Real-time) m3 50-day Moving Average m4 200-day Moving Average
m5 Change From 200-day Moving Average m6 Percent Change From 200-day Moving Average m7 Change From 50-day Moving Average
m8 Percent Change From 50-day Moving Average n Name n4 Notes
o Open p Previous Close p1 Price Paid
p2 Change in Percent p5 Price/Sales p6 Price/Book
q Ex-Dividend Date r P/E Ratio r1 Dividend Pay Date
r2 P/E Ratio (Real-time) r5 PEG Ratio r6 Price/EPS Estimate Current Year
r7 Price/EPS Estimate Next Year s Symbol s1 Shares Owned
s7 Short Ratio t1 Last Trade Time t6 Trade Links
t7 Ticker Trend t8 1 yr Target Price v Volume
v1 Holdings Value v7 Holdings Value (Real-time) w 52-week Range
w1 Day’s Value Change w4 Day’s Value Change (Real-time) x Stock Exchange
y Dividend Yield
分类: PHP 标签: ,

PHP获取用户真实ip地址代码

2011年11月25日 没有评论
if ($_SERVER["HTTP_X_FORWARDED_FOR"]) {
if ($_SERVER["HTTP_CLIENT_IP"]) {
$proxy = $_SERVER["HTTP_CLIENT_IP"];
} else {
$proxy = $_SERVER["REMOTE_ADDR"];
}
$ip = $_SERVER["HTTP_X_FORWARDED_FOR"];
} else {
if ($_SERVER["HTTP_CLIENT_IP"]) {
$ip = $_SERVER["HTTP_CLIENT_IP"];
} else {
$ip = $_SERVER["REMOTE_ADDR"];
}
}
echo "Your IP $ip";
if (isset($proxy)) {
echo "Your proxy IP is $proxy";
}
如果使用cdn或者squid代理 REMOTE获到的ip就是squid或cdn的ip
分类: PHP 标签:

php正则匹配简明

2011年11月25日 没有评论
. Any character except newline.
\. A period (and so on for \*, \(, \\, etc.)
^ The start of the string.
$ The end of the string.
\d,\w,\s A digit, word character [A-Za-z0-9_], or whitespace.
\D,\W,\S Anything except a digit, word character, or whitespace.
[abc] Character a, b, or c.
[a-z] a through z.
[^abc] Any character except a, b, or c.
aa|bb Either aa or bb.
? Zero or one of the preceding element.
* Zero or more of the preceding element.
+ One or more of the preceding element.
{n} Exactly n of the preceding element.
{n,} n or more of the preceding element.
{m,n} Between m and n of the preceding element.
??,*?,+?,
{n}?, etc.
Same as above, but as few as possible.
(expr) Capture expr for use with \1, etc.
(?:expr) Non-capturing group.
(?=expr) Followed by expr.
(?!expr) Not followed by expr.

在线php正则检测 http://regexpal.com/

分类: PHP, 网站 标签: ,

ThinkPHP框架如何修改去掉X-Powered-By

2011年11月23日 没有评论

这两天用网站header信息查看工具看了一下头部信息发现如下

http://www.quancha.cn/header/www.quancha.cn.html

HTTP/1.0 200 OK
Date: Wed, 23 Nov 2011 01:27:05 GMT
Server: Apache/2.2.14 (Ubuntu)
X-Powered-By: ThinkPHP2.1
Set-Cookie: PHPSESSID=q1vvtpiv3s9mo6nmkkvher8bl2; path=/
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: private
Pragma: no-cache

其中一行表示用thinkphp开发的这样容易被人利用已知漏洞攻击

去掉方法

阅读全文...

分类: PHP 标签:

iis rewrite 原始 request_uri

2011年8月12日 没有评论

话说重写:
网站结构如下:
index.php
source/src_{模块名}.php
template/tpl_{模块名}.php
通过首页统一入口来访问各个模块文件,
比如,最简单的统一入口访问代码:
define('ROOT', dirname(__FILE__));
$mod = isset($_GET['mod']) ? $_GET['mod'] : 'index';
$src = ROOT . 'source/src_' . $mod . '.php' ;
$tpl = ROOT . 'template/src_' . $mod . '.php' ;
file_exists($src) && include($src) ;
file_exists($tpl) && include($tpl) ;
现在访问一个地址:index.php?mod=news ;则会访问source/src_news.php 文件。
现在要让url重写,访问 /news 这个url能实现一样的效果,
Linux下的Apache和Nginx,
windows下的ISAPI_Rewrite模块重写,
重写要求,如果我访问的是不存在的文件,重定向到index.php,通过获取实际访问的url,来判断该调用哪个文件,如果我访问 /news?page=1 这个URL,重定向后:
三个服务器访问后的结果:
Apache 关于开启rewrite模块后,会产生三个头部:
$_SERVER['REDIRECT_STATUS'] => 200 (证明重写成功)
$_SERVER['REDIRECT_QUERY_STRING'] => page=1
$_SERVER['REDIRECT_URL'] => /news
而IIS的rewrite模块重写后,会有
$_SERVER['REDIRECT_STATUS'] => 200
$_SERVER['HTTP_X_REWRITE_URL'] => /news
Nginx重写后有:
$_SERVER['REDIRECT_STATUS'] => 200
所以,如果采用 $_SERVER['REDIRECT_URL'] 或 $_SERVER['HTTP_X_REWRITE_URL']都是不可取的,因为Nginx重写后,不产生重写URL,三个服务器并没有交集,如果还考虑其他服务器比如 lighttpd,cheroke等,可能产生的头部更加不一致。
通常需要考虑的就是PHP的 $_SERVER['REQUEST_URI']
现在看看这几个服务器产生的 REQUEST_URI是否一致:
apache下:
$_SERVER['REQUEST_URI'] => /news
Nginx下:
$_SERVER['REQUEST_URI'] => /news
IIS下:
$_SERVER['REQUEST_URI'] => /index.php/news
这他妈是怎么回事?干嘛加个/index.php这个玩意呢?我没有搞懂,不过IIS的重写不完全支持.htaccess语法,所以,不知道是否是我配置的问题,但是我绞尽脑汁也弄不掉这个/index.php
所以,干脆用IIS专用的 $_SERVER['HTTP_X_REWRITE_URL'] 来替换 $_SERVER['REQUEST_URI']
暂时世界清静了。
要提取完整的重写后的URL地址,还没这么简单,需要考虑子目录下重写的情况,下回放出完整的无bug的提取重写url的函数,依靠此函数,将函数分割,然后形成$controller, $action .. 等参数

分类: PHP 标签:
普人特福的博客cnzz&51la for wordpress,cnzz for wordpress,51la for wordpress