首页 > 编程技术 > php

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

发布时间:2016-11-25 16:19

前面写过了一篇文章是图片反盗链的,我自己弄得单独的页面就采用了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--]

您可能感兴趣的文章: