php实现新浪短链接调用API代码

 更新时间:2016年11月25日 16:19  点击:1399
前面写过了一篇文章是图片反盗链的,我自己弄得单独的页面就采用了sina的短连接,对于短连接来说还是方便的,地址太长占地方。下面分享源码,有注释,非原创
 代码如下 复制代码

<?php
//Sina App_Key
define('SINA_APPKEY', '31641035');

function curlQuery($url) {
 //设置附加HTTP头
 $addHead = array(
 "Content-type: application/json"
 );

 //初始化curl,当然,你也可以用fsockopen代替
 $curl_obj = curl_init();

 //设置网址
 curl_setopt($curl_obj, CURLOPT_URL, $url);

 //附加Head内容
 curl_setopt($curl_obj, CURLOPT_HTTPHEADER, $addHead);

 //是否输出返回头信息
 curl_setopt($curl_obj, CURLOPT_HEADER, 0);

 //将curl_exec的结果返回
 curl_setopt($curl_obj, CURLOPT_RETURNTRANSFER, 1);

 //设置超时时间
 curl_setopt($curl_obj, CURLOPT_TIMEOUT, 15);

 //执行
 $result = curl_exec($curl_obj);

 //关闭curl回话
 curl_close($curl_obj);

 return $result;
}

//简单处理下url,sina对于没有协议(http://)开头的和不规范的地址会返回错误
function filterUrl($url = '') {
 $url = trim(strtolower($url));
 $url = trim(preg_replace('/^http:///', '', $url));
 if ($url == '')
 return false;
 else
 return urlencode('http://' . $url);
}

//根据长网址获取短网址
function sinaShortenUrl($long_url) {
 //拼接请求地址,此地址你可以在官方的文档中查看到
 $url = 'http://api.t.sina.com.cn/short_url/shorten.json?source=' . SINA_APPKEY . '&url_long=' . $long_url;

 //获取请求结果
 $result = curlQuery($url);

 //下面这行注释用于调试,你可以把注释去掉看看从sina返回的信息是什么东西
 //print_r($result);exit();

 //解析json
 $json = json_decode($result);

 //异常情况返回false
 if (isset($json->error) || !isset($json[0]->url_short) || $json[0]->url_short == '')
 return false;
 else
 return $json[0]->url_short;
}

//根据短网址获取长网址,此函数重用了不少sinaShortenUrl中的代码,以方便你阅读对比,你可以自行合并两个函数
function sinaExpandUrl($short_url) {
 //拼接请求地址,此地址你可以在官方的文档中查看到
 $url = 'http://api.t.sina.com.cn/short_url/expand.json?source=' . SINA_APPKEY . '&url_short=' . $short_url;

 //获取请求结果
 $result = curlQuery($url);

 //下面这行注释用于调试,你可以把注释去掉看看从sina返回的信息是什么东西
 //print_r($result);exit();

 //解析json
 $json = json_decode($result);

 //异常情况返回false
 if (isset($json->error) || !isset($json[0]->url_long) || $json[0]->url_long == '')
 return false;
 else
 return $json[0]->url_long;
}

//要缩短的网址
$url = $long; //这里自己看着办,修改成你要缩短的网址还是获取post的数据还是怎么滴。

$url = filterUrl($url);
$short = sinaShortenUrl($url);
$ulong = sinaExpandUrl($short);
?>

本文中短连接已经附带的一个appkey不用再自己申请KEY当然你如果需要使用你自己的您也可以自己去替换。至于用法就看你了,镶入到其他程序使用啊?单独做个生成短连接的页面都不管我的事啊。使用方法不多说。最近比较懒。

购物车是现在电商开发者必须要做的一个功能了,下面我来给大家整理两个可用于电商网站的简单购物车程序代码,有兴趣的同学不防进入参考一下

例子1

最近在写一个电子商务的网站,在做购物车的时候才发现php里面没有map这种数据结构,我们不能简单的通过一个hashmap来实现购物车,于是我想到到数组,通过数组的值的格式化来进行编写。
也就是说,我们是通过循环数组的值,通过拆分值来判断数据是不是重复,比如我现在浏览的商品的id是4,添加的数量是3,我就在数组里面存放4-3,以后如果当遇到是id是4的时候,我们只是需要时改变数组里面这个位置的数值,如果id在数组里面拆分比较都不存在,则往数组里面添加数据。删除购物车制定id 的商品也是循环数组,这个值,使用unset()来释放这个值。
具体的实现代码:
—————————————————————————————————————————–

 代码如下 复制代码
<?php
session_start();
if($_SESSION['carts']==””){
$carts=array();
array_push($carts, “0-0″);
$_SESSION['carts']=$carts;
}
$method=$_GET['method'];
if($method==”add”){
$productId=$_GET['productid'];
$number=$_GET['number'];
$carts=$_SESSION['carts'];
$flag=”false”;
for($i=0;$i<sizeof($carts);$i++){
$pn=$carts[$i];
$pns=split(“-”, $pn);
if($pns[0]==$productId){
$carts[$i]=$productId.”-”.$number;
$flag=”true”;
$location=$i;
}
}
if($flag==”true”){
$carts[$location]=$productId.”-”.$number;
}else{
array_push($carts, $productId.”-”.$number);
}
$_SESSION['carts']=$carts;
}
if($method==”delete”){
$productId=$_GET['productid'];
$carts=$_SESSION['carts'];
for($i=0;$i<sizeof($carts);$i++){
$pn=$carts[$i];
$pns=split(“-”, $pn);
if($pns[0]==$productId){
unset($carts[$i]);
}
}
$_SESSION['carts']=$carts;
}
?>

———————————————————————————————————–
php实现购物车程序代码

上面电子商务课程的时候做的一个简单的程序了,就是一个在线购物,不过还是90多分的哦!~ 其实只要是这种类似的程序,都是简单的增删改查系统,无非就是就对数据库的操作,我们要做的就是很好的实现这个业务逻辑,以及能很好的设计相关的字段来控制,比如是商品的状态的控制,是上线还是下线,还是推荐的。
    现在看看连接数据库的代码吧!~
数据库配置代码,其实这个可以在xml配置文件里面设置:

 代码如下 复制代码
class DbConfig{
var $databaseAddress="180.153.178.89";
var $dataBaseUser="pantingwen";
var $databasePassword="753116";
var $database="sqlpantingwen";
/**
* @return the $databaseAddress
*/
public function getDatabaseAddress() {
return $this->databaseAddress;
}
/**
* @return the $dataBaseUser
*/
public function getDataBaseUser() {
return $this->dataBaseUser;
}
/**
* @return the $databasePassword
*/
public function getDatabasePassword() {
return $this->databasePassword;
}
/**
* @return the $database
*/
public function getDatabase() {
return $this->database;
}
/**
* @param field_type $databaseAddress
*/
public function setDatabaseAddress($databaseAddress) {
$this->databaseAddress = $databaseAddress;
}
/**
* @param field_type $dataBaseUser
*/
public function setDataBaseUser($dataBaseUser) {
$this->dataBaseUser = $dataBaseUser;
}
/**
* @param field_type $databasePassword
*/
public function setDatabasePassword($databasePassword) {
$this->databasePassword = $databasePassword;
}
/**
* @param field_type $database
*/
public function setDatabase($database) {
$this->database = $database;
}
}
?>
数据库连接代码:
include_once 'DbConfig.php';
define("conn", getcon());
function getcon(){
$dbConfig=new DbConfig();
$con=mysql_connect($dbConfig->getDatabaseAddress(),$dbConfig->getDataBaseUser(),$dbConfig->getDatabasePassword());
return $con;
}
/**
* 选择一款数据库
* Enter description here ...
*/
function _select_db(){
$dbConfig=new DbConfig();
if(!mysql_select_db($dbConfig->getDatabase())){
exit('找不到指定的数据库');
}
}
/**
* 设置字符集
* Enter description here ...
*/
function _set_names(){
if(!mysql_query('set names utf8')){
exit('字符集错误');
}
}
function _query($_sql){
_select_db();
_set_names();
if(!$result=mysql_query($_sql,conn)){
echo mysql_error();
}
return $result;
}
/**
* 只能是获取一个数据组
* Enter description here ...
* @param unknown_type $_sql
*/
function _fetch_array($_sql){
return mysql_fetch_array(_query($_sql),MYSQL_ASSOC);
}
/**
* 返回数据组
* Enter description here ...
* @param unknown_type $_sql
*/
function _fetch_array_list($_result){
return mysql_fetch_array($_result,MYSQL_ASSOC);
}
/**
* 影响到到的记录数
* Enter description here ...
*/
function _affect_rows(){
return mysql_affected_rows();
}
/**
* 判断是不是存在数据
* Enter description here ...
* @param unknown_type $_sql
* @param unknown_type $_info
*/
function _is_repeat($_sql,$_info){
if(_fetch_array($_sql)){
}
}
function _close(){
if(!mysql_close(_conn)){
exit('关闭异常');
}
}
?>

效果截图:php实现购物车程序代码

本方法使用PHPEXCEL插件读取excel文件转化为数组了,后期还有没有完成的我们可以把转换成数组之后再保存到mysql数据库这个就非常的方便了。
 代码如下 复制代码

<?php
/**
 * @desc PHPEXCEL导入
 * return array();
 */
function importExcel($file)
{
    require_once 'PHPExcel.php';
    require_once 'PHPExcel/IOFactory.php';
    require_once 'PHPExcel/Reader/Excel5.php';
    $objReader = PHPExcel_IOFactory::createReader('Excel5');//use excel2007 for 2007 format
    $objPHPExcel = $objReader->load($file);
    $sheet = $objPHPExcel->getSheet(0);
    $highestRow = $sheet->getHighestRow(); // 取得总行数
    $highestColumn = $sheet->getHighestColumn(); // 取得总列数
    $objWorksheet = $objPHPExcel->getActiveSheet();
 
    $highestColumnIndex = PHPExcel_Cell::columnIndexFromString($highestColumn);
    $excelData = array();
    for ($row = 1; $row <= $highestRow; $row++) {
        for ($col = 0; $col < $highestColumnIndex; $col++) {
            $excelData[$row][] =(string)$objWorksheet->getCellByColumnAndRow($col, $row)->getValue();
        }
    }
    return $excelData;
}
 
//用法:
importExcel('test.xsl');
从phpMyAdmin4.2.0开始,phpMyAdmin 高级功能的默认数据库 phpmyadmin 中又新增了一张表 pma__savedsearches。所以利用升级脚本 update.sh 将 phpMyAdmin 从 4.1.x 升级到 4.2.x 后,登录 phpMyAdmin 会出现以下提示

phpMyAdmin 高级功能尚未完全设置,部分功能未激活。
点击查看提示信息,就会发现 $cfg['Servers'][$i]['savedsearches'] 出现错误提示。

 

备注:如果是全新安装LAMP一键安装脚本,则不受影响。

解决办法:
1、删除 phpMyAdmin 安装目录 /data/www/default/phpmyadmin 下旧的配置文件 config.inc.php,再下载最新的文件。
命令如下:
rm -f /data/www/default/phpmyadmin/config.inc.php
wget --no-check-certificate https://raw.githubusercontent.com/teddysun/lamp/master/conf/config.inc.php -O /data/www/default/phpmyadmin/config.inc.php
chown apache:apache /data/www/default/phpmyadmin/config.inc.php
2、导入最新的 sql 文件,将数据库 phpmyadmin 中新增的一张表 pma__savedsearches 创建出来。在安装最新版 phpMyAdmin 时,update.sh 脚本已经把最新的 create_tables.sql 复制到网站服务器上传文件夹 upload/ 中。在 phpMyAdmin 的导入标签中,执行该 sql 文件即可。
phpMyAdmin从4.1.x升级到4.2.x注意事项
3、退出 phpMyAdmin,重新登录后,错误提示已经不存在了。
phpMyAdmin从4.1.x升级到4.2.x注意事项

 

 

在未看到这篇文章之前我们一般不会对于缓存这么看重,经过测试之后我们发现使用文件缓存比直接使用数据库要快几倍,下面测试是6倍之多哦,下面一起来看看吧。

在Thinkphp项目中测试各种环境下的程序执行时间
不使用缓存:

 代码如下 复制代码

<?php
header("content-type:text/html;charset=utf-8");
      
$starttime=caltime();//开始时间   

$articles=array();

//循环取出500条文章信息
for($i=0;$i<100;$i++){
   $sql="select a.*,c.* from blog_article as a,blog_category as c where a.reid=c.id limit 0,5";
   $articles=array_merge($articles,M('article')->query($sql));
}

$overtime=caltime();//结束时间

echo '不使用缓存条件下程序执行时间是:'.($overtime-$starttime).'秒';

?>

结果:不使用缓存条件下程序执行时间是:0.0600001811981秒

文件缓存:

 代码如下 复制代码

<?php
header("content-type:text/html;charset=utf-8");

$starttime=caltime();//开始时间

$articles=S('articles');
if(!$articles){
   $articles=array();
   //循环取出500条 www.111cn.net 文章信息
   for($i=0;$i<100;$i++){
       $sql="select a.*,c.* from blog_article as a,blog_category as c where a.reid=c.id limit 0,5";
       $articles=array_merge($articles,M('article')->query($sql));
   }
   S('articles',$articles,60);
}

$overtime=caltime();//结束时间

echo '使用文件缓存条件下程序执行时间是:'.($overtime-$starttime).'秒';
?>

结果:使用文件缓存条件下程序执行时间是:0.00999999046326秒

 代码如下 复制代码

<?php
header("content-type:text/html;charset=utf-8");
      
$starttime=caltime();//开始时间

$mem=new Memcache();
if(!$mem->connect('127.0.0.1',11211)){
   echo '连接失败';
}

$articles=$mem->get('articles');

if(!$articles){
   $articles=array();
   //循环取出500条文章信息
   for($i=0;$i<100;$i++){
       $sql="select a.*,c.* from blog_article as a,blog_category as c where a.reid=c.id limit 0,5";
       $articles=array_merge($articles,M('article')->query($sql));
   }
   $mem->set('articles',$articles,MEMCACHE_COMPRESSED,60);
}

$overtime=caltime();//结束时间

echo '使用memcache缓存条件下程序执行时间是:'.($overtime-$starttime).'秒';
?>

结果:使用memcache缓存条件下程序执行时间是:0.00999999046326秒

 代码如下 复制代码

<?php
header("content-type:text/html;charset=utf-8");
      
$starttime=caltime();//开始时间

$redis=new Redis();
$redis->connect('127.0.0.1','6379');

if(!$redis){
   echo '连接失败';
}

$articles=$redis->get('articles');

if(!$articles){
   $articles=array();
   //循环取出500条www.111cn.net文章信息
   for($i=0;$i<100;$i++){
       $sql="select a.*,c.* from blog_article as a,blog_category as c where a.reid=c.id limit 0,5";
       $articles=array_merge($articles,M('article')->query($sql));
   }
   $redis->setex('articles',60,$articles);
}

$overtime=caltime();//结束时间

echo '使用redis缓存条件下程序执行时间是:'.($overtime-$starttime).'秒';

?>

结果:使用redis缓存条件下程序执行时间是:0.00999999046326秒

可见使用缓存的条件下,程序的执行速度比不使用缓存的时候快了6倍,

但是不同缓存由于数据不是特别庞大,几乎没有什么差别

[!--infotagslink--]

相关文章

  • php语言实现redis的客户端

    php语言实现redis的客户端与服务端有一些区别了因为前面介绍过服务端了这里我们来介绍客户端吧,希望文章对各位有帮助。 为了更好的了解redis协议,我们用php来实现...2016-11-25
  • jQuery+jRange实现滑动选取数值范围特效

    有时我们在页面上需要选择数值范围,如购物时选取价格区间,购买主机时自主选取CPU,内存大小配置等,使用直观的滑块条直接选取想要的数值大小即可,无需手动输入数值,操作简单又方便。HTML首先载入jQuery库文件以及jRange相关...2015-03-15
  • 不打开网页直接查看网站的源代码

      有一种方法,可以不打开网站而直接查看到这个网站的源代码..   这样可以有效地防止误入恶意网站...   在浏览器地址栏输入:   view-source:http://...2016-09-20
  • php 调用goolge地图代码

    <?php require('path.inc.php'); header('content-Type: text/html; charset=utf-8'); $borough_id = intval($_GET['id']); if(!$borough_id){ echo ' ...2016-11-25
  • JS基于Mootools实现的个性菜单效果代码

    本文实例讲述了JS基于Mootools实现的个性菜单效果代码。分享给大家供大家参考,具体如下:这里演示基于Mootools做的带动画的垂直型菜单,是一个初学者写的,用来学习Mootools的使用有帮助,下载时请注意要将外部引用的mootools...2015-10-23
  • JS实现的简洁纵向滑动菜单(滑动门)效果

    本文实例讲述了JS实现的简洁纵向滑动菜单(滑动门)效果。分享给大家供大家参考,具体如下:这是一款纵向布局的CSS+JavaScript滑动门代码,相当简洁的手法来实现,如果对颜色不满意,你可以试着自己修改CSS代码,这个滑动门将每一...2015-10-21
  • JS+CSS实现分类动态选择及移动功能效果代码

    本文实例讲述了JS+CSS实现分类动态选择及移动功能效果代码。分享给大家供大家参考,具体如下:这是一个类似选项卡功能的选择插件,与普通的TAb区别是加入了动画效果,多用于商品类网站,用作商品分类功能,不过其它网站也可以用,...2015-10-21
  • JS实现自定义简单网页软键盘效果代码

    本文实例讲述了JS实现自定义简单网页软键盘效果。分享给大家供大家参考,具体如下:这是一款自定义的简单点的网页软键盘,没有使用任何控件,仅是为了练习JavaScript编写水平,安全性方面没有过多考虑,有顾虑的可以不用,目的是学...2015-11-08
  • php 取除连续空格与换行代码

    php 取除连续空格与换行代码,这些我们都用到str_replace与正则函数 第一种: $content=str_replace("n","",$content); echo $content; 第二种: $content=preg_replac...2016-11-25
  • php简单用户登陆程序代码

    php简单用户登陆程序代码 这些教程很对初学者来讲是很有用的哦,这款就下面这一点点代码了哦。 <center> <p>&nbsp;</p> <p>&nbsp;</p> <form name="form1...2016-11-25
  • PHP实现清除wordpress里恶意代码

    公司一些wordpress网站由于下载的插件存在恶意代码,导致整个服务器所有网站PHP文件都存在恶意代码,就写了个简单的脚本清除。恶意代码示例...2015-10-23
  • jQuery实现鼠标滑过链接控制图片的滑动展开与隐藏效果

    本文实例讲述了jQuery实现鼠标滑过链接控制图片的滑动展开与隐藏效果。分享给大家供大家参考,具体如下:这里演示jQuery实现鼠标移动到链接上,滑动展开/隐藏图片效果,鼠标放在“上一页”“下一页”上,立即浮现出所对应的图...2015-10-30
  • js识别uc浏览器的代码

    其实挺简单的就是if(navigator.userAgent.indexOf('UCBrowser') > -1) {alert("uc浏览器");}else{//不是uc浏览器执行的操作}如果想测试某个浏览器的特征可以通过如下方法获取JS获取浏览器信息 浏览器代码名称:navigator...2015-11-08
  • JS实现双击屏幕滚动效果代码

    本文实例讲述了JS实现双击屏幕滚动效果代码。分享给大家供大家参考,具体如下:这里演示双击滚屏效果代码的实现方法,不知道有觉得有用处的没,现在网上还有很多还在用这个特效的呢,代码分享给大家吧。运行效果截图如下:在线演...2015-10-30
  • jQuery+slidereveal实现的面板滑动侧边展出效果

    我们借助一款jQuery插件:slidereveal.js,可以使用它控制面板左右侧滑出与隐藏等效果,项目地址:https://github.com/nnattawat/slideReveal。如何使用首先在页面中加载jquery库文件和slidereveal.js插件。复制代码 代码如...2015-03-15
  • JS日期加减,日期运算代码

    一、日期减去天数等于第二个日期function cc(dd,dadd){//可以加上错误处理var a = new Date(dd)a = a.valueOf()a = a - dadd * 24 * 60 * 60 * 1000a = new Date(a)alert(a.getFullYear() + "年" + (a.getMonth() +...2015-11-08
  • PHP+jQuery翻板抽奖功能实现

    翻板抽奖的实现流程:前端页面提供6个方块,用数字1-6依次表示6个不同的方块,当抽奖者点击6个方块中的某一块时,方块翻转到背面,显示抽奖中奖信息。看似简单的一个操作过程,却包含着WEB技术的很多知识面,所以本文的读者应该熟...2015-10-21
  • PHP开发微信支付的代码分享

    微信支付,即便交了保证金,你还是处理测试阶段,不能正式发布。必须到你通过程序测试提交订单、发货通知等数据到微信的系统中,才能申请发布。然后,因为在微信中是通过JS方式调用API,必须在微信后台设置支付授权目录,而且要到...2014-05-31
  • SQLMAP结合Meterpreter实现注入渗透返回shell

    sqlmap 是一个自动SQL 射入工具。它是可胜任执行一个广泛的数据库管理系统后端指印, 检索遥远的DBMS 数据库等,下面我们来看一个学习例子。 自己搭建一个PHP+MYSQ...2016-11-25
  • PHP常用的小程序代码段

    本文实例讲述了PHP常用的小程序代码段。分享给大家供大家参考,具体如下:1.计算两个时间的相差几天$startdate=strtotime("2009-12-09");$enddate=strtotime("2009-12-05");上面的php时间日期函数strtotime已经把字符串...2015-11-24