手机浏览 RSS 2.0 订阅 膘叔的简单人生 , 腾讯云RDS购买 | 超便宜的Vultr , 注册 | 登陆
浏览模式: 标准 | 列表2012年09月的文章

利用curl上传文件

利用php的curl库上传文件真的很方便
注意几点
1、只能是POST
2、可以不写头(平时的form有文件和无文件时发送的时候,)
3、postfields的时候,不要你傻傻的http_build_query,你越是这么做了。黑黑。。。就反而不一定对了
4、上传的文件用@来连接。
一个很小的例子

PHP代码
  1. $formAction = 'http://xxx/xxx/xx.upload.php';  
  2. $postVals = array(  
  3.      // /var/www/www.jpg 这个地址是绝对地址哦。可以让程序读取  
  4.      // windows下面可能就是d:/xxx/xxx/xxx.jpg  
  5.      'img'=>'@/var/www/xxx.jpg'//img就相当于表单中的<input type="file" name="img" />  
  6.    
  7. );  
  8. $ch = curl_init();  
  9. curl_setopt($ch, CURLOPT_URL, $formAction); //登录地址  
  10. curl_setopt($ch, CURLOPT_POST, 1); //这是POST数据  
  11. curl_setopt($ch, CURLOPT_POSTFIELDS, ($postVals)); //http_build_query( $postData)); ,如果你真用http_build_query,不一定能成功。所以。。。还是有curl自己去组合吧  
  12. $res = curl_exec($ch);
  13. curl_close($ch);  

看看多简单,一下子就成功了

车辆退税?

今天中午突然有人自称是车管所工作人员(手机号码:15900789421),说是国家政策有变。可以购车退税了。。。然后说出我的购车车型,车价,以及我的车牌号。。(刚上牌2天)。
然后和我说,你可以联系国税局工作人员,它的手机是18817242664。
我一听很纳闷,怎么会这么巧?当然心里也是有点小激动的,哇退税啊。我可以补回来好几千了。。那我退多少呢?我得查查相关政策,结果一查,靠,网上全是退税骗局。(其实在他说国税局工作人员的号码是手机号的时候,我就在纠结了,怎么会是手机呢?为什么不是固定电话 ?)
于是我就电话 18817242664 ,果然他的流程与网上说的一模一样,(等会我会贴出全部流程,COPY来的),因为懒得去ATM机那边玩他们所以就说我可以通过网上银行。他们就说不行,这不可以。反正折腾了半天,于是我问他,你们单位在哪里,我可以去你们单位办理吗?他说只能网上处理,窗口不受理。我问,那你们在什么地方,他说是南京鼓楼区,我说,你不是靖江的吗?怎么是南京的了?他说,这个业务只是省国税局才能办,我说哦。那你为什么是手机呢?他说这是3G座机。咦,好象是有这个说法。
我再问,那你的号码为什么是上海的呢?他解释说,3G号码可以随便选地方的,就和IP地址一样的。我说哦,那我把你电话记下来了。他说好的,你这个人怎么这么麻烦 ,要是每个人都象你这样,我们国税局怎么工作?然后就挂机了。。。
-------------
新闻:去年购买的汽车可退税?骗局!http://www.hezeshi.com/news/200812/501/

  近日,市民王小姐接到了“省车管所工作人员”的通知:她去年4月购买的汽车有数千元退税。购买了大半年的汽车居然能够退税?“省车管所工作人员”会用手机打来电话通知?王小姐带着疑问致电本报。

  给王小姐打电话的手机号码是13055922923,电话中一位带着闽南口音的“浙江省车管所通知中心工作人员”说,王小姐去年4月购买的 1.8排量汽车有3%的退税,具体退税金额和退税方法可咨询“国家退税中心”,“国家退税中心”电话是010-51666586,“车辆退税编号”是 008177。

  记者打进“国家退税中心”电话,对方核对了车主姓名、退税编号后,准确地报出了王小姐的购车时间、车型,并称:“你的车可退税4285元。退款 已经以车主名义存入国库银行临时账号332862900236,密码为916918。你可通过财政部国库语音查询系统4006269747进行转账。”

  为什么去年购买的汽车也可退税?对方表示,这是“国家税务”让利消费者。1.6升及以下的汽车退税幅度为5%,其他排量的汽车退税幅度较小,仅为3%。王小姐是电脑选号“选出”的第一批车主。

  记者随后拨通了“财政部语音查询系统”,对方先让车主查询账面金额,再提示车主选择相应的银行,输入账号和密码“转账”。至此,骗局终于走到了关键一步。

  有王小姐经历的车主还真不少,就在当天,记者身边就有3位朋友接到这样的电话,来电手机号是福建厦门、广东惠州等地的。

  记者致电12366税收服务热线。工作人员表示,购车退税的情况是有的,但非常有限:一是因质量原因,车辆被退回生产企业或经销商;二是应当办 理车辆登记注册的车辆,公安机关车辆管理机构不予办理车辆登记注册。若真的有退税新政策出台,税务部门会在媒体公告,符合条件的纳税人在指定时间到税务局 办理,而非通过电话逐个通知。

------------------

  新闻链接

  电话短信诈骗招招都可识破

  近期,短信、电话诈骗现象有上升之势,公安部门提醒市民,对以下几种诈骗方式要提高警惕:

  一、接到陌生电话,对方自称是你好友,曾有一定交往,并让你猜其身份。请不要跟他捉迷藏,直接问他是谁,简单核对就清楚了。

  二、对方在电话中打着上级领导身边工作人员的旗号要求你帮忙处理领导个人事务。此时你要多长个心眼,特别是不要急于付钱,待核实他身份后再帮忙也不迟。

  三、如果你接到“我是××省公证处的公证员××,恭喜你的手机或电话号码在××抽奖中中了×等奖,奖品是小轿车一辆……”接到这样的短信,请先回想一下,想想自己是否参加过将电话号码投入摇奖机等什么活动,如果没有请不要回复。

  四、“您好,您的朋友为您点播了一首××歌曲,以此表达他的思念和祝福,请您拨打×××收听。”当你拨打电话收听时,话费余额就会直线下降。

  五、如果你接到未知电话或响过一两下就挂断了,请不要随便回复,部分号码有的是加值付费电话,接到这类电话或陌生来电,一定要小心核对再行回复。

  六、“您好,这里是中国移动(或联通)客户服务热线,由于我们工作失误,您的电话费这几个月共多收×××元,如确认退费请按……”接到类似电话后只要认真查看来电号码,就可识破骗局。

  七、以××银行名义提醒:你在某地(一般在本市大型商场、超市或娱乐场所)刷卡消费,金额将于近期从你账户中扣除。如果你收到类似手机短信,再按短信里的电话询问,就可能栽进不法之徒的圈套。

  八、“本公司与电信制卡部门联合推出移动、联通手机卡充值,100元面值的现以××元低价促销,诚招各地代理经销商。”如果收到这种信息,请不要被低价诱惑,最好向移动与联通客户服务中心咨询是否属实。

-----------
更多网上的信息:退税中心

Tags: 退税

推荐小程序:TimThumb – PHP Image Resizer

这是一个单文件处理缩略图的程序,直接引用生成缩略图。有点意思,主要是方便啦 .。

官方地址是:http://www.binarymoon.co.uk/projects/timthumb/
文件也很小,只有一点点大,更关键的是可以缓存回来。也能取远程的图片,也可以设置allow的安全站点,这样就相对安全一点了,官方这么介绍 :
TimThumb is a simple, flexible, PHP script that resizes images. You give it a bunch of parameters, and it spits out a thumbnail image that you can display on your site.

TimThumb has seen a massive amount of use across the WordPress world, and a few months after we released it, I took over development from Tim, a friend of Darren Hoyts, who created the original script. Since I took over there have been a whole host of changes, bug fixes, and additions.

I set up this page to act as an archive/ resource, showing the best documentation and demos available for TimThumb. If you have any TimThumb related articles then please feel free to send them over to me so that I can add them to the list.

功能也相对比较方便,用法也很简单,官方现成就举了一些例子,并通过这些例子介绍了它的参数:

How to use TimThumb

看了上面的使用方法,再看看,这个,你就知道很多常见的方法和用法了:

stands for values What it does
src source url to image Tells TimThumb which image to resize › tutorial
w width the width to resize to Remove the width to scale proportionally (will then need the height) › tutorial
h height the height to resize to Remove the height to scale proportionally (will then need the width) › tutorial
q quality 0 - 100 Compression quality. The higher the number the nicer the image will look. I wouldn't recommend going any higher than about 95 else the image will get too large › tutorial
a alignment c, t, l, r, b, tl, tr, bl, br Crop alignment. c = center, t = top, b = bottom, r = right, l = left. The positions can be joined to create diagonal positions › tutorial
zc zoom / crop 0, 1, 2, 3 Change the cropping and scaling settings › tutorial
f filters too many to mention Let's you apply image filters to change the resized picture. For instance you can change brightness/ contrast or even blur the image › tutorial
s sharpen   Apply a sharpen filter to the image, makes scaled down images look a little crisper › tutorial
cc canvas colour hexadecimal colour value (#ffffff) Change background colour. Most used when changing the zoom and crop settings, which in turn can add borders to the image.
ct canvas transparency true (1) Use transparency and ignore background colour

参数很简单,就是不太好记。。。纠结啊

不过用起来的话,是真心简单

 

Tags: thumb

旧文:QeePHP中的优秀函数(三)

这几个函数还是来自于QeePHP的核心类Q中。不过,我是自认为,我的configure类有部分写的比他好,不过我没有考虑删除之类的。呵呵。

PHP代码
  1. /** 
  2.  * 获取指定的设置内容 
  3.  * 
  4.  * $option 参数指定要获取的设置名。 
  5.  * 如果设置中找不到指定的选项,则返回由 $default 参数指定的值。 
  6.  * 
  7.  * @code php 
  8.  * $option_value = Q::ini('my_option'); 
  9.  * @endcode 
  10.  * 
  11.  * 对于层次化的设置信息,可以通过在 $option 中使用“/”符号来指定。 
  12.  * 
  13.  * 例如有一个名为 option_group 的设置项,其中包含三个子项目。 
  14.  * 现在要查询其中的 my_option 设置项的内容。 
  15.  * 
  16.  * @code php 
  17.  * // +--- option_group 
  18.  * //   +-- my_option  = this is my_option 
  19.  * //   +-- my_option2 = this is my_option2 
  20.  * //   \-- my_option3 = this is my_option3 
  21.  * 
  22.  * // 查询 option_group 设置组里面的 my_option 项 
  23.  * // 将会显示 this is my_option 
  24.  * echo Q::ini('option_group/my_option'); 
  25.  * @endcode 
  26.  * 
  27.  * 要读取更深层次的设置项,可以使用更多的“/”符号,但太多层次会导致读取速度变慢。 
  28.  * 
  29.  * 如果要获得所有设置项的内容,将 $option 参数指定为 '/' 即可: 
  30.  * 
  31.  * @code php 
  32.  * // 获取所有设置项的内容 
  33.  * $all = Q::ini('/'); 
  34.  * @endcode 
  35.  * 
  36.  * @param string $option 要获取设置项的名称 
  37.  * @param mixed $default 当设置不存在时要返回的设置默认值 
  38.  * 
  39.  * @return mixed 返回设置项的值 
  40.  */  
  41. static function ini($option$default = null)  
  42. {  
  43.     if ($option == '/'return self::$_ini;  
  44.   
  45.     if (strpos($option'/') === false)  
  46.     {  
  47.         return array_key_exists($option, self::$_ini)  
  48.             ? self::$_ini[$option]  
  49.             : $default;  
  50.     }  
  51.   
  52.     $parts = explode('/'$option);  
  53.     $pos =& self::$_ini;  
  54.     foreach ($parts as $part)  
  55.     {  
  56.         if (!isset($pos[$part])) return $default;  
  57.         $pos =& $pos[$part];  
  58.     }  
  59.     return $pos;  
  60. }  
  61.   
  62. /** 
  63.  * 修改指定设置的内容 
  64.  * 
  65.  * 当 $option 参数是字符串时,$option 指定了要修改的设置项。 
  66.  * $data 则是要为该设置项指定的新数据。 
  67.  * 
  68.  * @code php 
  69.  * // 修改一个设置项 
  70.  * Q::changeIni('option_group/my_option2', 'new value'); 
  71.  * @endcode 
  72.  * 
  73.  * 如果 $option 是一个数组,则假定要修改多个设置项。 
  74.  * 那么 $option 则是一个由设置项名称和设置值组成的名值对,或者是一个嵌套数组。 
  75.  * 
  76.  * @code php 
  77.  * // 假设已有的设置为 
  78.  * // +--- option_1 = old value 
  79.  * // +--- option_group 
  80.  * //   +-- option1 = old value 
  81.  * //   +-- option2 = old value 
  82.  * //   \-- option3 = old value 
  83.  * 
  84.  * // 修改多个设置项 
  85.  * $arr = array( 
  86.  *      'option_1' => 'value 1', 
  87.  *      'option_2' => 'value 2', 
  88.  *      'option_group/option2' => 'new value', 
  89.  * ); 
  90.  * Q::changeIni($arr); 
  91.  * 
  92.  * // 修改后 
  93.  * // +--- option_1 = value 1 
  94.  * // +--- option_2 = value 2 
  95.  * // +--- option_group 
  96.  * //   +-- option1 = old value 
  97.  * //   +-- option2 = new value 
  98.  * //   \-- option3 = old value 
  99.  * @endcode 
  100.  * 
  101.  * 上述代码展示了 Q::changeIni() 的一个重要特性:保持已有设置的层次结构。 
  102.  * 
  103.  * 因此如果要完全替换某个设置项和其子项目,应该使用 Q::replaceIni() 方法。 
  104.  * 
  105.  * @param string|array $option 要修改的设置项名称,或包含多个设置项目的数组 
  106.  * @param mixed $data 指定设置项的新值 
  107.  */  
  108. static function changeIni($option$data = null)  
  109. {  
  110.     if (is_array($option))  
  111.     {  
  112.         foreach ($option as $key => $value)  
  113.         {  
  114.             self::changeIni($key$value);  
  115.         }  
  116.         return;  
  117.     }  
  118.   
  119.     if (!is_array($data))  
  120.     {  
  121.         if (strpos($option'/') === false)  
  122.         {  
  123.             self::$_ini[$option] = $data;  
  124.             return;  
  125.         }  
  126.   
  127.         $parts = explode('/'$option);  
  128.         $max = count($parts) - 1;  
  129.         $pos =& self::$_ini;  
  130.         for ($i = 0; $i < = $max$i ++)  
  131.         {  
  132.             $part = $parts[$i];  
  133.             if ($i < $max)  
  134.             {  
  135.                 if (!isset($pos[$part]))  
  136.                 {  
  137.                     $pos[$part] = array();  
  138.                 }  
  139.                 $pos =& $pos[$part];  
  140.             }  
  141.             else  
  142.             {  
  143.                 $pos[$part] = $data;  
  144.             }  
  145.         }  
  146.     }  
  147.     else  
  148.     {  
  149.         foreach ($data as $key => $value)  
  150.         {  
  151.             self::changeIni($option . '/' . $key$value);  
  152.         }  
  153.     }  
  154. }  
  155.   
  156. /** 
  157.  * 替换已有的设置值 
  158.  * 
  159.  * Q::replaceIni() 表面上看和 Q::changeIni() 类似。 
  160.  * 但是 Q::replaceIni() 不会保持已有设置的层次结构, 
  161.  * 而是直接替换到指定的设置项及其子项目。 
  162.  * 
  163.  * @code php 
  164.  * // 假设已有的设置为 
  165.  * // +--- option_1 = old value 
  166.  * // +--- option_group 
  167.  * //   +-- option1 = old value 
  168.  * //   +-- option2 = old value 
  169.  * //   \-- option3 = old value 
  170.  * 
  171.  * // 替换多个设置项 
  172.  * $arr = array( 
  173.  *      'option_1' => 'value 1', 
  174.  *      'option_2' => 'value 2', 
  175.  *      'option_group/option2' => 'new value', 
  176.  * ); 
  177.  * Q::replaceIni($arr); 
  178.  * 
  179.  * // 修改后 
  180.  * // +--- option_1 = value 1 
  181.  * // +--- option_2 = value 2 
  182.  * // +--- option_group 
  183.  * //   +-- option2 = new value 
  184.  * @endcode 
  185.  * 
  186.  * 从上述代码的执行结果可以看出 Q::replaceIni() 和 Q::changeIni() 的重要区别。 
  187.  * 
  188.  * 不过由于 Q::replaceIni() 速度比 Q::changeIni() 快很多, 
  189.  * 因此应该尽量使用 Q::replaceIni() 来代替 Q::changeIni()。 
  190.  * 
  191.  * @param string|array $option 要修改的设置项名称,或包含多个设置项目的数组 
  192.  * @param mixed $data 指定设置项的新值 
  193.  */  
  194. static function replaceIni($option$data = null)  
  195. {  
  196.     if (is_array($option))  
  197.     {  
  198.         self::$_ini = array_merge(self::$_ini$option);  
  199.     }  
  200.     else  
  201.     {  
  202.         self::$_ini[$option] = $data;  
  203.     }  
  204. }  
  205.   
  206. /** 
  207.  * 删除指定的设置 
  208.  * 
  209.  * Q::cleanIni() 可以删除指定的设置项目及其子项目。 
  210.  * 
  211.  * @param mixed $option 要删除的设置项名称 
  212.  */  
  213. static function cleanIni($option)  
  214. {  
  215.     if (strpos($option'/') === false)  
  216.     {  
  217.         unset(self::$_ini[$option]);  
  218.     }  
  219.     else  
  220.     {  
  221.         $parts = explode('/'$option);  
  222.         $max = count($parts) - 1;  
  223.         $pos =& self::$_ini;  
  224.         for ($i = 0; $i < = $max$i ++)  
  225.         {  
  226.             $part = $parts[$i];  
  227.             if ($i < $max)  
  228.             {  
  229.                 if (!isset($pos[$part]))  
  230.                 {  
  231.                     $pos[$part] = array();  
  232.                 }  
  233.                 $pos =& $pos[$part];  
  234.             }  
  235.             else  
  236.             {  
  237.                 unset($pos[$part]);  
  238.             }  
  239.         }  
  240.     }  
  241. }  

 

Tags: qeephp

旧文:QeePHP中的优秀函数(二)

这两个函数来自于Helper_Array,我觉得是非常常用的方法,功能也比较强大。适合大家使用。

PHP代码
  1. /** 
  2.  * 将一个平面的二维数组按照指定的字段转换为树状结构 
  3.  * 
  4.  * 用法: 
  5.  * @code php 
  6.  * $rows = array( 
  7.  *     array('id' => 1, 'value' => '1-1', 'parent' => 0), 
  8.  *     array('id' => 2, 'value' => '2-1', 'parent' => 0), 
  9.  *     array('id' => 3, 'value' => '3-1', 'parent' => 0), 
  10.  * 
  11.  *     array('id' => 7, 'value' => '2-1-1', 'parent' => 2), 
  12.  *     array('id' => 8, 'value' => '2-1-2', 'parent' => 2), 
  13.  *     array('id' => 9, 'value' => '3-1-1', 'parent' => 3), 
  14.  *     array('id' => 10, 'value' => '3-1-1-1', 'parent' => 9), 
  15.  * ); 
  16.  * 
  17.  * $tree = Helper_Array::tree($rows, 'id', 'parent', 'nodes'); 
  18.  * 
  19.  * dump($tree); 
  20.  *   // 输出结果为: 
  21.  *   // array( 
  22.  *   //   array('id' => 1, ..., 'nodes' => array()), 
  23.  *   //   array('id' => 2, ..., 'nodes' => array( 
  24.  *   //        array(..., 'parent' => 2, 'nodes' => array()), 
  25.  *   //        array(..., 'parent' => 2, 'nodes' => array()), 
  26.  *   //   ), 
  27.  *   //   array('id' => 3, ..., 'nodes' => array( 
  28.  *   //        array('id' => 9, ..., 'parent' => 3, 'nodes' => array( 
  29.  *   //             array(..., , 'parent' => 9, 'nodes' => array(), 
  30.  *   //        ), 
  31.  *   //   ), 
  32.  *   // ) 
  33.  * @endcode 
  34.  * 
  35.  * 如果要获得任意节点为根的子树,可以使用 $refs 参数: 
  36.  * @code php 
  37.  * $refs = null; 
  38.  * $tree = Helper_Array::tree($rows, 'id', 'parent', 'nodes', $refs); 
  39.  *  
  40.  * // 输出 id 为 3 的节点及其所有子节点 
  41.  * $id = 3; 
  42.  * dump($refs[$id]); 
  43.  * @endcode 
  44.  * 
  45.  * @param array $arr 数据源 
  46.  * @param string $key_node_id 节点ID字段名 
  47.  * @param string $key_parent_id 节点父ID字段名 
  48.  * @param string $key_childrens 保存子节点的字段名 
  49.  * @param boolean $refs 是否在返回结果中包含节点引用 
  50.  * 
  51.  * return array 树形结构的数组 
  52.  */  
  53. static function toTree($arr$key_node_id$key_parent_id = 'parent_id',  
  54.                        $key_childrens = 'childrens', & $refs = null)  
  55. {  
  56.     $refs = array();  
  57.     foreach ($arr as $offset => $row)   
  58.     {  
  59.         $arr[$offset][$key_childrens] = array();  
  60.         $refs[$row[$key_node_id]] =& $arr[$offset];  
  61.     }  
  62.   
  63.     $tree = array();  
  64.     foreach ($arr as $offset => $row)   
  65.     {  
  66.         $parent_id = $row[$key_parent_id];  
  67.         if ($parent_id)  
  68.         {  
  69.             if (!isset($refs[$parent_id]))  
  70.             {  
  71.                 $tree[] =& $arr[$offset];  
  72.                 continue;  
  73.             }  
  74.             $parent =& $refs[$parent_id];  
  75.             $parent[$key_childrens][] =& $arr[$offset];  
  76.         }  
  77.         else  
  78.         {  
  79.             $tree[] =& $arr[$offset];  
  80.         }  
  81.     }  
  82.   
  83.     return $tree;  
  84. }  
  85.   
  86. /** 
  87.  * 将树形数组展开为平面的数组 
  88.  * 
  89.  * 这个方法是 tree() 方法的逆向操作。 
  90.  * 
  91.  * @param array $tree 树形数组 
  92.  * @param string $key_childrens 包含子节点的键名 
  93.  * 
  94.  * @return array 展开后的数组 
  95.  */  
  96. static function treeToArray($tree$key_childrens = 'childrens')  
  97. {  
  98.     $ret = array();  
  99.     if (isset($tree[$key_childrens]) && is_array($tree[$key_childrens]))  
  100.     {  
  101.         $childrens = $tree[$key_childrens];  
  102.         unset($tree[$key_childrens]);  
  103.         $ret[] = $tree;  
  104.         foreach ($childrens as $node)   
  105.         {  
  106.             $ret = array_merge($ret, self::treeToArray($node$key_childrens));  
  107.         }  
  108.     }  
  109.     else  
  110.     {  
  111.         unset($tree[$key_childrens]);  
  112.         $ret[] = $tree;  
  113.     }  
  114.     return $ret;  
  115. }  

不过显而易见,这两个函数,都不需要多介绍,tree2list,list2tree,想想也知道怎么用,再加上注释又比较全。
可惜QeePHP不再开发,而ThinkPHP积下来的问题又很多,改动起来也非常痛苦。所以我开始慢慢分析一下。

Tags: qeephp

Records:30123456