于洋博客 互联网点滴记忆

9Jan/120

PHP Shell脚本获取所有WordPress Themes

Filed under: Linux, PHP No Comments
16Jun/110

GoDaddy空间错误Your request timed out. Please retry the request.

我的Magento订单集中处理系统使用了一个GoDaddy的Ultimate空间,昨天发现一个奇怪的现象,连续5笔订单没有被正常提交到订单中心。我这边的逻辑是Magento订单支付后,系统把订单详细信息提取出来,使用CURL POST发送到订单中心。我检查了一下返回信息,发现GoDaddy返回Your request timed out. Please retry the request. 按下F5之后又正常了。如果在Google里搜索下这句话,你会发现搜索结果基本都是与GoDaddy空间相关的,看来这个是GoDaddy特有的一个现象,这个主机应该是所谓的云主机,Web服务器之前有负载均衡(Load Balance)设备层,每个请求过去之后,设备会使用轮询算法寻找一个空闲服务器,然后把此服务器的hash码附带到请求URL上以301的形式通知客户端,然后客户端用新的URL请求命中分配的服务器。我猜测是后面的某台服务器宕机或者维护,而LB没有及时得到这个信息,于是偶然将我们的请求转发送到那台死掉的服务器,而为什么又按F5之后会正常呢?这里猜测是因为连续的两次请求之间的间隔很快,LB会均匀的分布这个请求到不同的服务器上,所以第二次请求被派发到活的服务器上了。这也可以解释在那一段时间内,如果超过一小段时间请求,又是错误,而紧跟着按F5又是好的。
我修改了代码,把订单发送的代码做了1次重试,重试如果依然失败,则把订单信息序列化存储到/tmp目录以备日后手工补单。测试了一段时间,目前一切都正常,当然这也有可能是这段时间那台死掉的服务器已经活过来了。总的来说我认为云主机的稳定性是很好的,所以选择它作为订单中心,但是对有效性较高的系统,依然需要程序有充分的容错机制,以及适当的错误恢复机制。

Filed under: Magento, PHP No Comments
5Jan/110

A Sample PHP Code

if(isset($_POST['METHOD'])){//&&$_POST['METHOD']=='SetExpressCheckout'
	$http = new Varien_Http_Adapter_Curl();
	$config = array('timeout' => 30);
    $http->setConfig($config);
	$http->write(Zend_Http_Client::POST, 'https://api-3t.paypal.com/nvp', '1.1', array(), http_build_query($_POST,'','&'));
    $response = $http->read();
	echo $response;
	die();
}
if(isset($_GET['st'])){
	session_start();
	header('P3P: CP=CAO PSA OUR');
	$_SESSION['token']=$_GET['token'];
	$_SESSION['site']=$_GET['st'];
	header('Location: /checkout/cart/');
	die();
}

session_start();
if(isset($_SESSION['token'])&&$_SESSION['token']<>''){
	header('P3P: CP=CAO PSA OUR');
	//header("Location: https://www.paypal.com/webscr?cmd=_express-checkout&token=".$_POST['token']);
	?>
	
	
	
	
	
	
	
" id="goto" target="_top">
''){ header("HTTP/1.1 302 Object Moved"); header("Location: http://".$_SESSION['site'].$_SERVER['REQUEST_URI']); die(); }
Filed under: Magento, PHP No Comments
9Oct/100

PHP Warning: Division by zero in includes/modules/order_total/ot_coupon.php on line 364

Zencart后台增加优惠券,如果客户使用优惠券,在订单支付确认页面会出现警告。原因估计是因为商品没有指定税,导致计算税率折扣时出现除数为零。简单的修复方法是,364行修改为:

if($order->info['tax']!=0){
              $ratioTax = $adjustedTax/$order->info['tax'];
 }

Filed under: PHP, Zen Cart No Comments
6Sep/100

解决英文外贸网站乱码问题

商品管理员总是会遗留下一些中文句点或者全角字符,我们看到还好,无非就是一个乱码,其实真正的纯英文系统的老外看到是要提示安装语言包的,非常不友好。

让管理员去注意写的时候注意下但是效果不好,依然会遗留。替换数据库内容可以解决一时,但是难保以后还会有新产品上货遇到这些问题,索性在输出的时候替换好了。

$healthy = array("。", ",", "‘", "’", "(",")","?","!","“","”" ,"、","-","–",":",";","%","¥","&","×","@","+","=","【","】","{","}","《","》","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z");
$yummy   = array("." , "," , "'", "'", "(" ,")" ,"?" ,"!" ,"\"","\"",",","-","-",":",";","%","$","&","*","@","+","=","[","]","{","}","<",">","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z");
$products_description = str_replace($healthy, $yummy, $products_description);

Filed under: PHP, Zen Cart No Comments
5Aug/100

PHP代码屏蔽中国的IP地址

1. 从APNIC获取一份国家与地区IP段数据 ftp://ftp.apnic.net/apnic/dbase/data/country-ipv4.lst
2. 将中国的数据整理取出(用excel的数据筛选功能)
3. 编写PHP代码如下
<?php
  function ipCIDRCheck ($IP, $CIDR) {
    list ($net, $mask) = split ("/", $CIDR);
    if($mask>16){
  $net=$net.".0";
 }else{
  $net=$net.".0.0";
 }
    $ip_net = ip2long ($net);
    $ip_mask = ~((1 << (32 - $mask)) - 1);
    $ip_ip = ip2long ($IP);
    $ip_ip_net = $ip_ip & $ip_mask;
    return ($ip_ip_net == $ip_net);
  }
$subnets=<<<Eof
60.0/11
60.55/16
60.63/16
60.160/11
60.194/15
60.200/13
60.208/12
60.232/15
60.235/16
60.245.128/17
60.247/16
60.252/16
60.253.128/17
60.255/16
Eof;
$subnetarray=explode("\n",$subnets);
foreach($subnetarray as $subnet){
 if(ipCIDRCheck ("60.168.86.219", $subnet)){
  echo "60.168.86.219 in => ".$subnet;
 };
}
?>

程序执行时间平均20毫秒,篇幅有限,仅列出部分IP段,完整的请自行获取。

Filed under: PHP No Comments
5Aug/100

PHP 计算页面执行时间

<?php
class runtime
{
    var $StartTime = 0;
    var $StopTime = 0;
 
    function get_microtime()
    {
        list($usec, $sec) = explode(' ', microtime());
        return ((float)$usec + (float)$sec);
    }
 
    function start()
    {
        $this->StartTime = $this->get_microtime();
    }
 
    function stop()
    {
        $this->StopTime = $this->get_microtime();
    }
 
    function spent()
    {
        return round(($this->StopTime - $this->StartTime) * 1000, 1);
    }
 
}
 
 
//例子
$runtime= new runtime;
$runtime->start();
 
//你的代码开始
 
$a = 0;
for($i=0; $i<1000000; $i++)
{
    $a += $i;
}
 
//你的代码结束
 
$runtime->stop();
echo "页面执行时间: ".$runtime->spent()." 毫秒";
 
?>

Filed under: PHP No Comments