https://store.docker.com/images/php
更多容器镜像请访问 https://store.docker.com/
在php里Pdo是没有mysql_ping和mysqli_ping函数的,可以使用以下方法来代替它
class NPDO { private $pdo; private $params; public function __construct() { $this->params = func_get_args(); $this->init(); } public function __call($name, array $args) { return call_user_func_array(array($this->pdo, $name), $args); } // The ping() will try to reconnect once if connection lost. public function ping() { try { $this->pdo->query('SELECT 1'); } catch (PDOException $e) { $this->init(); // Don't catch exception here, so that re-connect fail will throw exception } return true; } private function init() { $class = new ReflectionClass('PDO'); $this->pdo = $class->newInstanceArgs($this->params); } }
转自:https://terenceyim.wordpress.com/2009/01/09/adding-ping-function-to-pdo/
或者使用以下方法(目前本人在用)
/** * 检查连接是否可用 * @param Link $dbconn 数据库连接 * @return Boolean */ function ping() { try { $ret = $this->getAttribute(constant("PDO::ATTR_SERVER_INFO")); if ($ret === null) { return false; } } catch (\PDOException $e) { if(strpos($e->getMessage(), 'MySQL server has gone away')!==false){ echo PHP_EOL . $e->getMessage() . PHP_EOL; return false; } } return true; }
Laravel是一套简洁、优雅的PHP Web开发框架(PHP Web Framework)。它可以让你从面条一样杂乱的代码中解脱出来;它可以帮你构建一个完美的网络APP,而且每行代码都可以简洁、富于表达力。
一、Selects
检索表中的所有行
$users = DB::table('users')->get(); foreach ($users as $user) { var_dump($user->name); }
从表检索单个行
$user = DB::table('users')->where('name', 'John')->first(); var_dump($user->name);
检索单个列的行
$name = DB::table('users')->where('name', 'John')->pluck('name');
检索一个列值列表
$roles = DB::table('roles')->lists('title');
该方法将返回一个数组标题的作用。你也可以指定一个自定义的键列返回的数组
$roles = DB::table('roles')->lists('title', 'name');
指定一个Select子句
$users = DB::table('users')->select('name', 'email')->get(); $users = DB::table('users')->distinct()->get(); $users = DB::table('users')->select('name as user_name')->get();
Select子句添加到一个现有的查询
$query = DB::table('users')->select('name'); $users = $query->addSelect('age')->get();
where
$users = DB::table('users')->where('votes', '>', 100)->get();
今天接到客服部工作人员反馈的一个问题,客户使用产品系统是允许用户添加产品属性的,而每个属性是由多个表单域组成 ,这样当每添加一个属性就等于添加了n个表单域,这个客户添加的非常的多,发现在提交保存的时候总是失败,提示其中一个表单元素的索引值不存在,经测试是发现服务端接收的一些表单域丢失了一部分。起初分析的是服务器接收的数据超出了php设置的max_post_size(其实当时已经设置了8M,足够使用了),修改了测试发现此问题仍然存在。后来将用户原来的一些添加的表单元素进行删除,再重新添加同样数据库表单域可以成功,但一旦超出一定数量的表单域就会发生丢失的情况,这个时候首先怀疑的是apache是否有类似限制接收隐藏域的指令,找了没有找到,紧接着在php中批到一个max_input_vars这个指令,意思就是说php中允许接收的最大表单域数据,到目前为止基本上是确定这个原因引起的了,奖其修改为2000,重启Apache,发现一切正常。
总结:提起php中的max_input_vars 估计很少人知道这个这个指令,因为他的使用场景实在是太少了,在php.ini中这个指令的定义是指服务端最大可以接收的表单域的数量多少,默认是1000,这足够我们平时使用了。但仍然有一些特殊的情况下需要修改此值的大小。
http://yansu.org/2014/09/26/use-old-version-of-brew-php.html
通过brew安装的php可以通过brew link
和brew unlink
来切换不同版本。
例如
brew list
brew unlink php56
brew link php55
大版本可以用brew list
来查,如果是小版本的话只能去/usr/local/Cellar/php55
看了。这个时候使用php-version
可以更方便一点。
我测试的此方法不行,只能使用php-verson 进行切换。
php-version
php-version是一个帮助管理从brew安装的php版本切换的工具。
安装非常简单
brew install php-version
然后执行
source $(brew --prefix php-version)/php-version.sh
php-version
直接执行
php-version
就可以看到现有的版本,比如我自己的
$ php-version
5.5.15
* 5.5.16
5.5.17
然后使用以下命令切换即可
php-version 5.5.15
再看php的版本,已经切换好了。
对于从默认mac自带的版本切换到新版本很方便,如
brew install php70 #最新版本php7.0.7 php-version 7.0.7
Windows版的PHP从版本5.2.1开始有Thread Safe(线程安全)和None Thread Safe(NTS,非线程安全)之分(Linux/Unit平台没有这个概念的东西的),这两者不同在于何处?到底应该用哪种?这里做一个简单的介绍。
PHP有2中运行方式:ISAPI和FastCGI。
ISAPI执行方式是以DLL动态库的形式使用,可以在被用户请求后执行,在处理完一个用户请求后不会马上消失,所以需要进行线程安全检查,这样来提高程序的执行效率,所以如果是以ISAPI来执行PHP,建议选择Thread Safe版本;
而FastCGI执行方式是以单一线程来执行操作,所以不需要进行线程的安全检查,除去线程安全检查的防护反而可以提高执行效率,所以,如果是以FastCGI来执行PHP,建议选择Non Thread Safe版本。
对于apache服务器来说一般选择isapi方式,而对于nginx服务器则选择FastCGI方式。
从图上可以看出,php从下到上是一个4层体系
①Zend引擎
Zend整体用纯c实现,是php的内核部分,它将php代码翻译(词法、语法解析等一系列编译过程)为可执行opcode的处理并实现相应的处理方法、 实现了基本的数据结构(如hashtable、oo)、内存分配及管理、提供了相应的api方法供外部调用,是一切的核心,所有的外围功能均围绕zend 实现。 Continue reading
最近有下二次开发的程序,由于源程序使用了zend压缩,提示需要安装 Zend Guard Loader 扩展。而安装zend guard 7后,发现在phpinfo()里检测不到,后来才发现原来zend guard只能使用nfs非安全线程的php,没有办法,重新下载NFS版本的php版本。以下为安装要点:
我用的是WampServer集成环境,于是就想到了把 Apache 换成 FastCGI 模式来跑 PHP5.3 nts 版,这样就可以使用Zend Guard Loader 扩展了。 Continue reading