标签PHP下的文章

Jerry Bendy 发布于 11月09, 2016

docker 启动多个 PHP-FPM 容器并配置 nginx 负载均衡

我的API服务已经迁到docker以及美国服务器有一周的时间了,不知道是网络的问题还是docker的问题,迁到美国的服务器后明显感觉并发时不如之前在阿里云时稳定。之前在阿里云部署时一个页面40个请求毫无压力(之前也没用docker,直接LNMP架构部署),但在迁移之后只要并发数量一高,FPM进程准会挂掉。我自己使用的一个工具页面上有四十多个小图标需要调用这个API服务,只要一刷新FPM必挂。尝试过调整docker内FPM进程的子进程数量,效果并不明显,加上服务器配置低,单个FPM进程子进程数不能调太高,否则容易影响其它服务(我猜的)。于是乎想到一个办法:启动两个FPM容器,两个容器拥有相同的配置以及子进程数,两者...

阅读全文 »

Jerry Bendy 发布于 10月19, 2016

如何在 docker 中使用 PHP FPM

已经有段时间没写过东西了,最近在着手把之前的PHP服务docker化,以方便在两台服务器之间部署。整个学习和使用docker的过程还算顺利吧,但在部署PHPFPM的过程中遇到了一些问题,以下作为记录供遇到同样问题的人参考吧。系统架构因为我可能会经常修改Nginx配置,加上我是自己编译的最新版的Nginx+Openssl(为了启用HTTP/2),所以就懒得把Nginx打包成docker镜像了,而是直接将Nginx装在了宿主机,并开放80和443端口。系统所需的除Nginx以外的其它服务全部由docker提供服务,如PHP和Redis。每一个服务使用一个容器,均为官方镜像。Redis的使用就不说了,比较简单,说下在使...

阅读全文 »

Jerry Bendy 发布于 05月21, 2016

Laravel 5 自定义环境变量

Laravel5中提供了一种通过.env文件定义环境变量的方式,根据官方文档的说明应该在不同的环境下使用不同的.env文件,并且此文件不应该提交到版本控制中去。如此设定自然是为了方便不同的环境或者多名开发人员完全可以使用自已的.env环境变量。但是官方文档中对于如何自定义.env文件中的环境变量却提的很少。文档中只提及了在需要自定义环境变量时最好是在.env.example文件中写一份变量的定义,以方便其他开发人员配置。下面就以我的“遭遇”来讲下Laravel5中如何自定义环境变量。(内容比较啰嗦,可直接跳到最后环境变量的正确用法部分)问题因为我需要路由里面根据不同的二级域名选择不同的控制器,而测试环境和生产环境...

阅读全文 »

Jerry Bendy 发布于 03月24, 2016

前端AJAX请求跨域时遇到的一些坑

这两天在做公司的PC站时因为需要使用angular的$http服务存取数据,而且接口又在另一个域名下面,不得不研究下跨域的问题.以下把这两天遇到的一些问题总结下.(都是我自己遇到的一些问题,所以可能不太全面)Access-Control-Allow-Origin的问题跨域遇到的第一个问题就是Access-Control-Allow-Origin的错误,Chrome报错Responsetopreflightrequestdoesn'tpassaccesscontrolcheck:No'Access-Control-Allow-Origin'headerispresentonthereques...

阅读全文 »

Jerry Bendy 发布于 12月02, 2015

【分享】PHP中的并发

今天看到一篇讲PHP并发的文章,感觉不错,于是便Copy了下来。原文如下:周末去北京面了两个公司,认识了几位技术牛人,面试中聊了很多,感觉收获颇丰。认识到了自己的不足之处,也坚定了自己对计算机学习的信心。本文是对其中一道面试题的总结。面试中有一个问题没有很好的回答出来,题目为:并发3个http请求,只要其中一个请求有结果,就返回,并中断其他两个。当时考虑的内容有些偏离题目原意,一直在考虑如何中断http请求,大概是在client->recv()之前去判断结果是否已经产生,所以回答的是用socket去发送一个http请求,把socket加入libevent循环监听,在callback中判断是否已经得到结果,如...

阅读全文 »

Jerry Bendy 发布于 11月28, 2015

mysqli使用localhost问题 Warning: mysqli::mysqli(): (HY000/2002): No such file or directory

今天在使用PHP的CLI方式访问mysql数据库时出现了一个Nosuchfileordirectory的错误,查找资料并在最终解决后记录一下。这个问题应该也会存在于非CLI方式访问,简单的代码是这样的:<?php$mysqli=newmysqli('localhost','root','root','test');如果上面的连接地址是localhost就会报此错误,改成127.0.0.1后正常。当主机填写为localhost时MySQL会采用unixdomainsocket连接,当主机填写为127.0.0.1时MySQL会采用TCP/IP的方式连接。使用Unixsocket的连接比TCP/IP的连接更加快速...

阅读全文 »

Jerry Bendy 发布于 09月10, 2015

MAMP PRO安装PHP扩展的方法

这几天因为需要使用MAC做PHP开发,安装了一个MAMPPRO的试用版,整体感觉非常好用,还可以自由选择PHP版本、Apache扩展、很方便的创建网站并自动修改系统hosts文件等。MAMP和MAMPPRO是两个独立软件,MAMP可以单独运行,支持简单的操作如PHP版本切换、Apache/Nginx切换、启动/停止服务等。MAMPPRO不能独立运行,它需要依赖MAMP软件,其实MAMPPRO就是MAMP的一个功能强大的控制面板,并提供了一些MAMP本身不支持的功能(如修改hosts、DDNS、方便的修改PHP运行方式以及Apache模块、方便的添加和管理虚拟网站等),售价不到400元,你值得拥有~因为我的项目很多...

阅读全文 »

Jerry Bendy 发布于 07月21, 2015

迁移服务器遇到的蛋疼问题:Nginx PHP “No input file specified”

昨天因为服务器到期把网站迁移到另一台服务器,使用的LNMP架构,网站各部分迁移完成后发现了一个蛋疼的问题:很多网页打开都提示”Noinputfilespecified”,甚至直接404,而且时好时坏。去网上搜了下资料,大概意思如下:任何对.php文件的请求,都简单地交给php-cgi去处理,但没有验证该php文件是否存在。PHP文件不存在,没办法返回普通的404错误,它返回一个404,并带上一句”Noinputfilespecified”另外,还可能跟路径或者权限有关系,或者SCRIPT_FILENAME变量没有被正确的设置(这在nginx是最常见的原因)。因为Nginx的PATHINFO设置是直接复制的之前服务...

阅读全文 »

Jerry Bendy 发布于 04月06, 2015

后台任务和PHP-Resque的使用(五) 创建任务

到目前为止已经让Worker运行了,我们需要创建并添加任务。这一节主要了解什么是任务(Job),以及如何使用任务。简单的说,任务就是传递给Worker要执行的内容。我们需要把Job依次添加到Queue来执行。要把任务添加到队列,程序必须要包含php-resque库以及Redis。使用require_once'/path/to/php-resque/lib/Resque.php';包含php-resque的库文件,它会自动连接到Redis服务器,如果你的Redis服务器不是默认的localhost:6379,你需要使用Resque::setBackent('192.168.1.56:3680...

阅读全文 »

Jerry Bendy 发布于 04月05, 2015

后台任务和PHP-Resque的使用(四) 使用Worker

注意,这篇教程仅适用于Linux和OSX的系统,Windows并不适用。理解Worker的本质技术上讲一个Worker就是一个不断运行的PHP进程,并且不断监视新的任务并运行。一个简单的Worker的代码如下:while(true){$jobs=pullData();//从队列中拉取任务foreach($jobsas$class=>$args){//循环每个找到的任务$job=new$class();$job->perform($args);//执行任务}sleep(300);//等待5分钟后再次尝试拉取任务}以上这些代码的具体实现都可以交给php-resque。创建一个Worker,php-resq...

阅读全文 »