PHP

用PHP把 图片,文件上传到 mongodb gridfs 中

需要 php mongodb扩展, mongodb/mongodb 组件
安装 mongodb/mongodb 组件
composer require mongodb/mongodb
//把图片上传到 mongodb gridfs中
<?php
use \MongoDB\Client;

$host = '192.168.6.1:27018,192.168.6.2:27018';
$database = 'Images';
$bucket = (new \MongoDB\Client('mongodb://'.$host.'/'.$database,
[
'username'=>'admin',
'password'=>'admin',
//'ssl' => true,
// 'replicaSet' => 'myReplicaSet',
'authSource'=>'admin',
]) 
        

symfony 4 框架安装与使用指南

symfony 4 框架安装与使用指南

注意:需要用PHP7.1版本进行操作。

创建一个新项目

第一步是创建项目。目前, 这需要通过composer create-project来完成。我们可能会释放一个工具来更快地引导项目。

走起:

composer create-project symfony/skeleton demo
cd demo

 

该命令将下载骨架, 该框架仅由一个composer.json文件组成。

 

然后, 它将文件提取到demo目录中, 并自动运行composer installsymfony/flex是要安装的第一个包, 以便它可以挂钩到Composer进程。当Composer安装 (或更新) 其他依赖项时,

        

如何防止PHP进程异常退出(进程被杀)?

背景

通常,在cli下运行的常驻后台PHP进程,可能异常退出,比如php执行过程中出现的致命错误,或被 kill 命令手动杀死等。如下面的php代码:

<?php
while(1){
    $content = fgets(STDIN);
    if(empty($content)){
        sleep(1);
    }
    //逻辑处理部分代码省略
}
?>

 

查错

我们使用register_shutdown_function可以跟踪到底是什么错误导致的进程退出。(想更多了解register_shutdown_function,请查看博文 妙用php中的register_shutdown_function和fastcgi_finish_request)加入了错误捕捉代码。如下:

<?php
$is_end = false;
function catch_error(){
        global $is_end;
        $time = date('Y-m-d H:i:s');
        $error = error_get_last();
        $msg = "$time [error]";
        if($is_end){
                
                

又不一样的 Symfony —— SF4 展望

作为一个 Symfony 框架的老用户,symfony(注意那个年代 s 还是小写的) 诞生于 PHP <5.2 时代,跟 PHP 5.3 时代的 Symfony2 相比简直天壤之别。而最近 Symfony3 的发布让我发现,似乎改动也不是很大,心想该不是 Symfony 也学 Chrome 那样加版本号了吧?这几天 Symfony 开发组老大又开始说 Symfony4 要发布的事情,但内容倒不至于让我太失望,的确变化也不小。下面就来说说老大哥提到了 SF4 到底有哪些变化。…

    

你必须知道的 17 个 Composer 最佳实践(已更新至 22 个)

尽管大多数 PHP 开发人员都知道如何使用 Composer,但并不是所有的人都在有效的或以最好的方式来使用它。 所以我决定总结一些在我日常工作流程很重要的东西。

大多数技巧的哲学是 “稳,不冒险”,这意味着如果有更多的方法来处理某些事情,我会使用最有把握不容易出错的方法。

Ellison 翻译于 2个月前

 查看其他 1 个版本

    

不依赖框架写出现代化 PHP 代码

我为你们准备了一个富有挑战性的事情。接下来你们将以  框架的方式开启一个项目之旅。

首先声明, 这篇并非又臭又长的反框架裹脚布文章。也不是推销 非原创 思想 。毕竟, 我们还将在接下来的开发之旅中使用其他框架开发者编写的辅助包。我对这个领域的创新也是持无可非议的态度。

这无关他人,而是关乎己身。作为一名开发者,它将有机会让你成长。

也许无框架开发令你受益匪浅的地方就是,可以从底层运作的层面中汲取丰富的知识。抛却依赖神奇的,帮你处理无法调试和无法真正理解的东西的框架,你将清楚的看到这一切是如何发生的。

很有可能下一份工作中,你并不能随心所以地选择框架开拓新项目。现实就是,在很多高价值,关键业务的 PHP 工作中均使用现有应用。 并且该应用程序是否构建在当前令人舒爽的 LaravelSymfony 等流行框架中,亦或是陈旧过时的 CodeIgniter 或者 FuelPHP 中,更有甚者它可能广泛出现在令人沮丧的  “面向包含体系结构” 的传统的 PHP 应用 之中,所以框架开发会在将来你所面临的任何 PHP 项目中助你一臂之力。

上古时代, 因为 某些系统 不得不解释分发 HTTP 请求,发送 HTTP

    

[原创首发]关于如何正确使用PHP框架及如何选择框架之我见.

用PHP 开发程序这么多年了,今天想和大家谈谈如何正确使用PHP框架.

即关于PHP开发什么时候用框架,用不用框架,用什么框架,不同项目是否用不同框架,是否要学习多个框架,付出多少学习成本等问题.

先说一下,我用过的框架有:Swoole, Laravel, phalcon ,symfony, codeigniter, thinkphp.

这几个框架都有什么特点? 有没有做什么项目都通吃的框架?

先说一下swoole,swoole是用C写的PHP扩展,性能很高,通常用于写后台服务和网络通信程序.,但是对于一般的普通web程序它不太适合.并且学习难度大.当然如果你追求性能,写后台服务和接口还是适合的.

再说一下 Phalcon这个框架,同样的C写的全栈框架,以php扩展方式发布,性能可以说是最好的.但是因为一是英文的文档,要求你英文比较好.phalcon在国内用的人比较少,所以中文文档不多.phalcon写web程序和接口都是很好的.但不适合写后台服务.还有一点是这个框架虽然好,但是因为是C写的,如果有一些bug,就要等官方修复,或需要你懂C语言自己来修复.还有一点扩展性不好,如果你想加新功能,比如mongodb数据库支持,它是支持的,但是需要是老的php mongo扩展,用新的php mongodb扩展的话,就需要写php代码来实现,这就降低了性能.所以说这框架很好,但还是有一些不便.

其次是Laravel这个框架,最近可是风头正旺,号称最好的框架,以优雅著称.也像phalcon一样,用到了最新的一些概念:如composer,依赖注入,服务定位等.国内用的人也不少,中文文档及资料也比较多.但是我想说的是性能是这个框架的硬伤,新安装的laravel 5.1 框架 输出一个hello world 每秒rps 才达到几十, 而最 新发布的laravel 5.5 及性能居然还不及laravel 5.1版.究其原因是因为这个框架一启动就加载了一百多个文件,这就是性能很低的原因(IO开销很贵的!). 这个框架再好,但是性能太低,就需要拿硬件来支撑.除非你是土壕,否则还是不建议用Laravel 这个框架.

再说一下 …

            

PHP函数式编程的初步认识

最近朋友推荐这本书:Functional PHP ,很多对于程序设计方面的思路值得多思考和借鉴。函数式编程不是一个框架或工具,而是一种编写代码的方式。FP 是一种软件开发风格,主要强调功能的使用,个人觉得对于重构代码很有帮助。书中也谈到了例如 PHP5.3 中引入的闭包函数和高阶函数,在实际开发过程中善于活学活用也是函数式的灵魂所在。

PHP 新版本的解读

增加了严格的键入和标量类型声明类型声明允许你用合适的类或标量类型( boolean,integer,string,MyClass 等)限定任何函数参数。这些在PHP 5中被部分支持为“类型提示”,但没有标量支持。在PHP 7中,你也可以声明函数返回值的类型。
作为一种动态语言,PHP 将总是试图将错误类型的值强制转换为期望的标量类型。
例如,当给定一个字符串时,需要一个整数参数的函数将强制该值为一个整数,文件顶部引用强制类型检测模式

declare(strict_types=1);

参数异常会抛出如下错误e

PHP Warning: Uncaught TypeError: Argument 1 passed to increment() must be of the type integerstring

Ramda函数式编程之PHP

0x00 何为函数式编程

网上已经有好多详细的接受了,我认为比较重要的有:

  1. 函数是“第一等公民”,即函数和其它数据类型一样处于平等地位
  2. 使用“表达式”(指一个单纯的运算过程,总是有返回值),而不是“语句”(执行操作,没有返回值)
  3. 没有”副作用“,即不修改外部值

0x01 开始函数式编程

在此之前,请先了解PHP中的匿名函数和闭包,可以参考我写得博客
函数式编程有两个最基本的运算:合成和柯里化。

函数合成

函数合成,即把多个函数的运算合成一个函数,如
A=f(x)
B=g(x)
C=f(g(x))
那么C即是A和B的合成。
用代码表示为:

$compose = function ($f,$g){
    return function ($x) use($f,$g){ //这里返回一个函数的函数,即高阶函数