Grafika 是一个 PHP 的图像处理库。可用于改变图像大小、剪切、比较,以及添加水印等操作。同时可以创建一些文本图片、几何图形并应用一些过滤器。基于 Imagick 和 GD 构建。 特征 智能裁剪 图像比较 感知哈希 高级图像处理过滤器 贝塞尔曲线 示例代码: ? 1 2 3 4 5 6 7 useGrafika\Grafika; $editor= Grafika::createEditor(); $editor->open( "path/to/jpeg/image.jpg"); $editor->resizeExact( 200, 200 ); $editor->save( "path/to/edited.jpg", null, 90 ); osc地址:http://www.oschina.net/p/grafika
View Details今天多说评论插件遇到点问题,就把原来的删除掉,想重新安装一遍,再次安装的时候遇到:无法安装这个包。 PCLZIP_ERR_MISSING_FILE (-4) : Missing archive file ‘C:\WIN….很长一段,不知道什么原因,就在网站搜了一下,原因可能是windows server权限的问题。最终在找到了一个解决方法。指定wp的临时文件夹路径,避免默认的文件夹在windows下没有权限。方法如下: 打开wordpress根目录下的wp-config.php文件 找到如下: /** WordPress 目录的绝对路径。 */ if ( !defined(‘ABSPATH’) ) define(‘ABSPATH’, dirname(__FILE__) . ‘/’); 在下面增加如下代码即可: /** 指定WordPress的临时目录 */ define(‘WP_TEMP_DIR’, ABSPATH . ‘wp-content/temp’); 最后再wp-content文件夹下新建个temp文件夹,然后再更新或下载插件试试。 from:http://blog.csdn.net/xiangqiao123/article/details/14119715
View Details准备好好学习学习PHP了吗?那么你首先应该考虑用什么开发工具(IDE)。市面上有很多这类工具,收费的有,免费的也有,选择起来并不轻松。 如果你说PHP编程用基础的文本编辑软件就可以了,比如用记事本。是的,这对于业余爱好者来说绝对可以。但选择一款功能丰富而完整的开发软件还是要好一些,尤其是专业开发者更有必要。这些软件如:NetBeans, PHPStorm, VIM, Zend Studio, Cloud9或Atom。 好的开发工具富有特点而且能够帮助开发者快速高效地编辑程序,它是开发者的基本需求,磨刀不误砍柴工,提前花点时间选择一款适合的开发软件是为上策。 那选择哪一款呢, 这个问题要看你的需求、偏好和预算。 选定一款之前试用几个也不错。 大量PHP开发软件支持跨平台系统,能用于Windows,Linux和Mac,而且提供免费下载。 对于初学者,我的建议是,你可以随意选择一款免费的,可用就行。 比如:NetBeans,VIM,Atom或Eclipse PDT。 企业和专业开发者可以用这些免费的开发软件完成程序编辑,但同时也有很多收费的平台因为整合了很多最新和更进步的功能特性而备受企业开发者的青睐。随便举几个,比如:PHPStorm, Sublime Text, Zend Studio, Nusphere, PHPED, PHP Designer和 Cloud 9等。 假如你只是想用PHP做简单的应用而非构架一整个系统,那么你也可以试一试那些线上的PHP开发工具,比如说PHPfiddle.com。 更简单的你可以选用witephponline.com和ideone.com。 好了,那让我们来看一下被全世界开发者们公认的10个优秀的开发工具吧。它们功能丰富,广为流传,最为先进而且备受喜爱。 1. NetBeans – 最好的PHP IDE (免费版本) NetBeans是供普通大众使用的PHP IDE,它功能丰富、免费并且支持多国语言,其中包括英语、日语、俄语、巴西葡萄牙语以及简体中文。NetBeans的免费版本的发布日期要回溯到2010年,Sun Microsystems开始将其作为开源项目发展,后来Sun Microsystems成为了Oracle的子公司。 自发布以来,NetBeans的下载次数已超过1800万次,同时拥有一个最大的致力于开源集成开发环境的开发者社区。 过去,NetBeans的用途很少,只能进行Java开发,但现在,这样的日子一去不复返了,NetBeans目前的稳定版是轻量级的、速度更快并且全面支持PHP。对于像Zend、Doctrine、 Smarty和Symfony2一类的流行PHP框架以及像Yii、CakePHP、 FuelPHP和Wordpress CMS一类的其它框架提供了开箱即用的支持,也通过laravel-ide-helper提供了对Laravel框架的开箱即用支持。 让NetBeans位居榜首的关键特性是拥有很多代码生成工具,像getter setter生成、代码模板、智能代码补全、提示、快速修复和重构等。另外还支持一些基本特性,包括代码折叠和格式化、try/catch代码补全以及矩形选区等。 当进入调试阶段时,你可以在本地或者远程使用命令行或者xDebug。NetBeans PHP编辑器对包括 javascript、HTML和CSS等web开发都提供了开箱即用的支持。所有这些特性轻而易举地使得NetBeans成为最好的开源PHP IDE。 阅读更多有关NetBeans的内容请访问官方网站netbeans.org。 2. PHPStorm- 最好的PHP IDE (商业版本) PHPStorm 是全功能的PHP IDE,其拥有最现代化的功能集可以快速便捷的进行网页开发。它由名叫JetBrains的公司开发并销售。 在过去的15年中,在开发工具的市场中JetBrains是最受人喜爱的公司,它使得编写代码更加的轻松和愉快。 PHPStorm 很好的支持主要的框架比如Symfony, Zend Framework, Yii, CakePHP, Laravel以及主要的CMS系统如Drupal, Magento 和Wordpress。 不是所有的Web开发项目都没有前端技术,这也正是PHPStorm耀眼之处, 它几乎提供了所有前端技术的实时编辑功能比如CSS, Sass, HTML5, CoffeeScript, TypeScript, JavaScript, Stylus, Less等等。同时还支持代码重构,调试和单元测试。 从发工具方面来说,它提供了版本控制系统,sql数据库,composer, 远程部署,vagrant,其他的客户端,命令行工具等诸如此类的功能。 从调试的角度来说,它支持Zend Debugger和Xdebug,也同时支持本地的或远程的。 PHPStorm是企业级IDE, 需要授权费用,主要的目标是专业的开发人员,但是它同时为教师,学生或开源的项目免费提供。 PHPStorm的普及程度可以从一个事实来衡量,就是众多的大公司如Expedia,Yahoo, Cisco, Salesforce 和wikipedia都曾有购买过PHPStorm IDE的授权。 你可以在以下地址下载PHPStorm试用版 […]
View Details在众多行业中,程序员属于高薪职业。无论是在国外还是国内,程序员的薪金水平普遍高于其他行业的工作岗位。 高薪的诱惑和充满挑战性的工作,令程序员一直成为备受欢迎的职业。在今年年初,Glassdoor发布的一份调查报告指出,在美国,程序员的就业情况仍然向好。据报告显示,在排名前25位的最能赚钱和需求量最高的工作岗位中,超过一半以上的岗位要求求职人员具备编程技术。因此,要想获得高薪不是一件容易的事情,你得有过硬的本领。 14种最具“吸金”能力的编程语言 据美国Rasmussen College(拉斯姆森学院)在2015年5月发表的一篇文章显示,在数以百计的编程语言中,以下14种编程语言最具“吸金”能力。 文章指出,这个结果是拉斯姆森学院收集了在2014年发布的1800万个招聘广告,以“平均年薪”和“招聘职位”两个指标为基础进行分析而得出来的。 (数据来源:Rasmussen College) 而在Indeed.com今年发布的调查数据则显示,根据编程工作的数量,排在前九位的编程语言如下: 图片来源:www.indeed.com 学习哪种编程语言可以赚到更多钱? 不同的编程语言适合不同的系统,不同的工程师也需要掌握不同的编程语言。 后台或服务器端的程序员通常都懂得Python, Ruby, PHP, Java或 .Net以及数据库的知识。前端或客户端的程序员掌握的编程语言主要是HTML, CSS和JavaScript,能力全面的程序员还具有设计能力。 移动应用的程序员懂得的语言是用于iOS 的Objective-C 或安卓系统的Java, 还有用于移动网站的HTML/CSS,他们当中有些人还懂得服务器的知识。3D或游戏开发者懂得 C/C , OpenGL和动画,同时具有艺术能力的程序员会更有优势。高效程序员懂得C/C 和Java,有的人还有数学和定量分析的能力。 如果你并不介意工程师的类型,Python, Objective-C, JavaScript, HTML和CSS这五种语言是值得学习的。因为每年它们都会出现在“最受欢迎的编程语言”名单中。此外,作为程序员,你还应该学习一些数据库,例如MySQL, MongoDB,而且要学习如何使用它来编程。 出处:网易科技 from:http://www.oschina.net/news/75295/these-programming-language-programmers-pay-the-highest
View Details如下是运行微信支付测试代码时出错代码: Warning: curl_setopt() expects parameter 2 to be long, string given in D:\wwwroot\weixinpaytest\pay\WxPay.JsApiPay.php on line 99 Fatal error: Uncaught exception ‘WxPayException‘ with message ‘curl出错,错误码:60‘ in D:\wwwroot\weixinpaytest\lib\WxPay.Api.php:564 Stack trace: #0 D:\wwwroot\weixinpaytest\lib\WxPay.Api.php(62): WxPayApi::postXmlCurl(‘<xml><appid><![…‘, ‘https://api.mch…‘, false, 6) #1 D:\wwwroot\weixinpaytest\pay\jsapi.php(36): WxPayApi::unifiedOrder(Object(WxPayUnifiedOrder)) #2 {main} thrown in D:\wwwroot\weixinpaytest\lib\WxPay.Api.php on line 564 第一个问题,这个问题完全是微信团队的问题,给出的example就是错的: Warning: curl_setopt() expects parameter 2 to be long, string given in D:\wwwroot\weixinpaytest\pay\WxPay.JsApiPay.php on line 99 找到WxPay.JsApiPay.php文件的99行,curl_setopt($ch, CURLOP_TIMEOUT, 30); 微信团队example代码里少了一个“T”,正确代码应该是 curl_setopt($ch, CURLOPT_TIMEOUT, 30); 这样,这一个问题就解决了。 下面说第二个问题: Fatal error: Uncaught exception ‘WxPayException‘ with message ‘curl出错,错误码:60‘ in […]
View Details本教程示例代码见:https://github.com/johnlui/Learn-Laravel-5 在任何地方卡住,最快的办法就是去看示例代码。 本文基于 Laravel 5.2 版本,无奈 5.2 的中文文档还没有跟上,大家勉强看一下 5.1 的吧: Laravel 5.1 中文文档: http://www.golaravel.com/laravel/docs/5.1/ http://laravel-china.org/docs/5.1 默认条件 你应该懂得 PHP 网站运行的基础知识,并且有了一个完善的开发环境。跟随本教程走完一遍,你将会得到一个基础的包含登录、后台编辑、前台评论的简单 blog 系统。 Tips 环境要求:PHP 5.5.9+,MySQL 5.1+ 本教程不推荐完全不懂 PHP 与 MVC 编程的人学习,Laravel 的学习曲线不仅仅是陡峭,而且耗时很长,请先做好心理准备。 这不是 “一步一步跟我做” 教程。本教程需要你付出一定的心智去解决一些或大或小的隐藏任务,以达到真正理解 Laravel 运行逻辑的目的。 本宝宝使用 Safari 截图是为了好看,宝宝们在开发时请选择 Chrome 哦~ 开始学习 1. 安装 许多人被拦在了学习 Laravel 的第一步:安装。并不是因为安装有多复杂,而是因为【众所周知的原因】。在此我推荐一个 composer 全量中国镜像:http://pkg.phpcomposer.com/ 。启用 Composer 镜像服务作为本教程的第一项小作业请自行完成哦。 镜像配置完成后,在终端(Terminal 或 CMD)里切换到你想要放置该网站的目录下(如 C:\wwwroot、/Library/WebServer/Documents/、/var/www/html、/etc/nginx/html 等),运行命令:
1 2 |
composer create-project laravel/laravel learnlaravel5 |
然后,稍等片刻,当前目录下就会出现一个叫 learnlaravel5 的文件夹,安装完成啦~ 2. 运行 为了尽可能地减缓学习曲线,推荐宝宝们使用 PHP 内置 web 服务器驱动我们的网站。运行以下命令:
1 2 3 |
<span class="hljs-built_in">cd</span> public php -S 0.0.0.0:1024 |
我在本地 hosts 中绑定了 fuck.io 到 127.0.0.1(如果你不会或者不想改 hosts,可以直接使用 127.0.0.1 代理我的 fuck.io),这时候访问 http://fuck.io:1024 就是这个样子的: 这时候你可能要问了:为什么本宝宝的页面是一片空白?请使用开发者工具查看网络请求,只要是 200 状态就说明运行成功了,空白是因为这个页面引用了 Google Fonts,你懂的~ 至于为什么选择 1024 […]
View Details2015年,软件开发界发生了很多变化。有很多流行的新语言发布了,也有很多重要的框架和工具发布了新版本。下面有一个我们觉得最重要的简短清单,同时也有我们觉得值得你在2016年花时间精力去学习的新事物的一些建议。 大趋势 在过去的几年里,有一个越来越明显的趋势是web应用的商业逻辑逐步从后端转移到了前端,然后后端变得只需要处理简单的数据API。这就让前端开发框架的选择变得尤为重要了。 另外一个重要的改变是2015年发布的 Edge 浏览器。这是IE的替代品,拥有全新的界面和更好的性能。跟IE不一样的是它同样采用了跟 FireFox 和 Chrome 一样的快速发布策略。这让JavaScript 开发者社区能够以周为单位获得最新版JavaScript 和 Web标准特性支持而不是像过去一样需要等很多年。 语言和平台 Python 3.5 在今年发布了,带来了很多新特性 比如 Asyncio,为你带来了类似 node.js 的事件机制,还有type hints。 鉴于Python 3 终于真正地火起来了我们强烈建议你替换掉 Python 2。几乎所有的库都已经支持 Python 3 了,所以现在是一个升级历史遗留代码的好时机。 PHP 7 是一个重要的新版本,这个版本修复了很多问题并且带来了新特性和性能提升(看看概览) 。 PHP 7 大约比 PHP 5.6 快2倍, 这对一些大型项目还有WordPress 和 Drupal之类的CMS系统影响很大。 我们强烈推荐 PHP之道,已经更新到最新的PHP7版本。 如果你需要更快的速度并且不介意换一个解释引擎的话,可以试试Facebook在用的 HHVM。 JavaScript 也以ES2015 标准 (大家通常叫做 ES6)的形式发布了更新。 为我们带来了激动人心的新功能。 感谢大多数浏览器版本的快速更新, 对 ES2015 的支持已经非常棒了,并且还有 Babel.js 这样的工具可以让你的新代码跑在低版本浏览器上。 Node.js 在这一年变化很多,开发者社区曾经分裂成 Node.js 和 io.js,然后又再度合并。 经历过这些之后的结局就是我们得到了一个有很多代码贡献者积极维护的项目,并且拥有了两个版本的 Node : 一个稳定的LTS (长期支持) 版本,这个版本注重稳定性,比较适合长期项目和大公司,和一个非长期支持但是最快实现新特征的版本。 Swift 2 在今年初发布了。 这是 Apple 出品的旨在简化 iOS 和 OS X 开发的现代编程语言。 几周前, Swift 正式开源并已经兼容 Linux。这意味着你可以用它来编写服务端应用了。 Go 1.5 在几个月前发布了, […]
View DetailsAES指高级加密标准(Advanced Encryption Standard),是当前最流行的一种密码算法,在web应用开发,特别是对外提供接口时经常会用到,下面是我整理的一套php与java通用的AES加密解密算法。 php版代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 |
<?php class CryptAES { protected $cipher = MCRYPT_RIJNDAEL_128; protected $mode = MCRYPT_MODE_ECB; protected $pad_method = NULL; protected $secret_key = ''; protected $iv = ''; public function set_cipher($cipher) { $this->cipher = $cipher; } public function set_mode($mode) { $this->mode = $mode; } public function set_iv($iv) { $this->iv = $iv; } public function set_key($key) { $this->secret_key = $key; } public function require_pkcs5() { $this->pad_method = 'pkcs5'; } protected function pad_or_unpad($str, $ext) { if ( is_null($this->pad_method) ) { return $str; } else { $func_name = __CLASS__ . '::' . $this->pad_method . '_' . $ext . 'pad'; if ( is_callable($func_name) ) { $size = mcrypt_get_block_size($this->cipher, $this->mode); return call_user_func($func_name, $str, $size); } } return $str; } protected function pad($str) { return $this->pad_or_unpad($str, ''); } protected function unpad($str) { return $this->pad_or_unpad($str, 'un'); } public function encrypt($str) { $str = $this->pad($str); $td = mcrypt_module_open($this->cipher, '', $this->mode, ''); if ( empty($this->iv) ) { $iv = @mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_RAND); } else { $iv = $this->iv; } mcrypt_generic_init($td, $this->secret_key, $iv); $cyper_text = mcrypt_generic($td, $str); $rt=base64_encode($cyper_text); //$rt = bin2hex($cyper_text); mcrypt_generic_deinit($td); mcrypt_module_close($td); return $rt; } public function decrypt($str){ $td = mcrypt_module_open($this->cipher, '', $this->mode, ''); if ( empty($this->iv) ) { $iv = @mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_RAND); } else { $iv = $this->iv; } mcrypt_generic_init($td, $this->secret_key, $iv); //$decrypted_text = mdecrypt_generic($td, self::hex2bin($str)); $decrypted_text = mdecrypt_generic($td, base64_decode($str)); $rt = $decrypted_text; mcrypt_generic_deinit($td); mcrypt_module_close($td); return $this->unpad($rt); } public static function hex2bin($hexdata) { $bindata = ''; $length = strlen($hexdata); for ($i=0; $i amp;< $length; $i += 2) { $bindata .= chr(hexdec(substr($hexdata, $i, 2))); } return $bindata; } public static function pkcs5_pad($text, $blocksize) { $pad = $blocksize - (strlen($text) % $blocksize); return $text . str_repeat(chr($pad), $pad); } public static function pkcs5_unpad($text) { $pad = ord($text{strlen($text) - 1}); if ($pad > strlen($text)) return false; if (strspn($text, chr($pad), strlen($text) - $pad) != $pad) return false; return substr($text, 0, -1 * $pad); } } $keyStr = 'UITN25LMUQC436IM'; $plainText = 'this is a string will be AES_Encrypt'; $aes = new CryptAES(); $aes->set_key($keyStr); $aes->require_pkcs5(); $encText = $aes->encrypt($plainText); $decString = $aes->decrypt($encText); echo $encText,"n",$decString; ?> |
运行结果: fhTD0NNIzv4jUEhJuC1htFFXJ/4S/rL6tDCJPiNvJ8mVLHWOD0HWweuxHynxoZf9 this is a string will be AES_Encrypt java版代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 |
import java.security.Key; import javax.crypto.Cipher; import javax.crypto.spec.SecretKeySpec; import org.apache.commons.codec.binary.Base64; public class CryptAES { private static final String AESTYPE ="AES/ECB/PKCS5Padding"; public static String AES_Encrypt(String keyStr, String plainText) { byte[] encrypt = null; try{ Key key = generateKey(keyStr); Cipher cipher = Cipher.getInstance(AESTYPE); cipher.init(Cipher.ENCRYPT_MODE, key); encrypt = cipher.doFinal(plainText.getBytes()); }catch(Exception e){ e.printStackTrace(); } return new String(Base64.encodeBase64(encrypt)); } public static String AES_Decrypt(String keyStr, String encryptData) { byte[] decrypt = null; try{ Key key = generateKey(keyStr); Cipher cipher = Cipher.getInstance(AESTYPE); cipher.init(Cipher.DECRYPT_MODE, key); decrypt = cipher.doFinal(Base64.decodeBase64(encryptData)); }catch(Exception e){ e.printStackTrace(); } return new String(decrypt).trim(); } private static Key generateKey(String key)throws Exception{ try{ SecretKeySpec keySpec = new SecretKeySpec(key.getBytes(), "AES"); return keySpec; }catch(Exception e){ e.printStackTrace(); throw e; } } public static void main(String[] args) { String keyStr = "UITN25LMUQC436IM"; String plainText = "this is a string will be AES_Encrypt"; String encText = AES_Encrypt(keyStr, plainText); String decString = AES_Decrypt(keyStr, encText); System.out.println(encText); System.out.println(decString); } } |
运行结果: fhTD0NNIzv4jUEhJuC1htFFXJ/4S/rL6tDCJPiNvJ8mVLHWOD0HWweuxHynxoZf9 this is a string will be AES_Encrypt 转自: http://alunblog.duapp.com/?p=17
View Details之前还以为从上至下统一用上UTF-8就高枕无忧了,哪知道今天在抓取新浪微博的数据的时候还是遇到字符的异常。 从新浪微博抓到的数据在入库的时候抛出异常: Incorrect string value: '\xF0\x90\x8D\x83\xF0\x90…' 发现导致异常的字符不是繁体而是某种佛经文字。。。额滴神。。。但是按道理UTF-8应该能支持才对啊,他不是万能的么? 原来问题出在mysql上,mysql如果设置编码集为utf8那么它最多只能支持到3个字节的UTF-8编码,而4个字节的UTF-8字符还是存在的,这样一来如果你建表的时候用的utf8字符集出异常就理所当然了。 解决方法很简单,修改字段或者表的字符集为utf8mb4。 比较蛋疼的是,字符集utf8mb4在mysql 5.5.3之后才支持。。。 [2015.03.30]更新: 事实证明只做上面的步骤是无法解决问题的,如果需要解决请参考:http://info.michael-simons.eu/2013/01/21/java-mysql-and-multi-byte-utf-8-support/ 明天要研究如何升级mysql了。。。 参考: http://stackoverflow.com/questions/10957238/incorrect-string-value-when-trying-to-insert-utf-8-into-mysql-via-jdbc http://topic.csdn.net/u/20091107/17/c0eb2463-b4bb-4197-bd67-0459db8aa137.html from:http://blog.csdn.net/shootyou/article/details/8236024
View DetailsMysql数据库上,执行Sql语句: INSERT tn_Areas (AreaCode, ParentCode, Name, PostCode, DisplayOrder, Depth, ChildCount) VALUES ('41030400', '41030000', '瀍河回族区', ", 1557, 3, 0); 报错: [Err] 1366 – Incorrect string value: '\xE7\x80\x8D\xE6\xB2\xB3…' for column 'Name' at row 1 原因:数据库的字符集是gb2312,不能识别繁体字 解决办法:修改数据库字符集为utf8 from:http://c.jinhusns.com/u/lix/b-438
View Details