symfony开发环境配置

如果是windows环境开发建议全程使用git bash代替cmd。

安装

一般来说有三种安装方式,1.symfony的安装器安装,2.composer安装,3.github安装,经过自己使用第一种安装方式是最简单速度也是最快的,输入如下命令创建一个新的symfony项目:

php -r "readfile('https://symfony.com/installer');" > symfony
symfony new my_project_name

Continue reading "symfony开发环境配置"

一次LAMP+mongodb环境搭建过程

昨天根据一位朋友的要求帮忙搭建一个lamp的环境,一路上遇到各种问题,记录在此。

问题:给你一台全新的centos系统,安装apache+mysql+php5.6+mongodb.

一台全新的centos,意味着可能没有网,没有vim,没有ping。。。当然如果ssh登录到远程服务器那肯定是有网的。如果你是直接在物理机上面操作,如果遇到没有网的情况,

vi /etc/sysconfig/network-scripts/ifcfg-eno(后面是一段数字)

将这个文件中的ONBOOT=no改成ONBOOT=yes,之后:wq保存退出
Continue reading "一次LAMP+mongodb环境搭建过程"

Centos下Yum安装PHP5.5/5.6/7.0

经本人使用,通过这种方式安装的php会有一些扩展没有安装。

centos安装posix扩展(workerman需要使用此扩展):

yum install php-posix

安装intl扩展:

yum list | grep intl

找到适合自己版本的扩展进行安装即可,我安装的是56w这个版本的,这个你可能没有,需要安装webtatic源,请查看文章

https://blog.yeskn.com/archives/893.html

该文章的php部分讲到如何安装webtatic源。

默认的版本太低了,手动安装有一些麻烦,想采用Yum安装的可以使用下面的方案:

  1. 检查当前安装的PHP包

    yum list installed | grep php

如果有安装的PHP包,先删除他们:

yum remove php.x86_64 php-cli.x86_64 php-common.x86_64 php-gd.x86_64 php-ldap.x86_64 php-mbstring.x86_64 php-mcrypt.x86_64 php-mysql.x86_64 php-pdo.x86_64</pre>
  1. 如果想删除上面安装的包,重新安装:
    rpm -qa | grep webstatic
    rpm -e  上面搜索到的包
    
  2. 运行yum install

yum install php55w.x86_64 php55w-cli.x86_64 php55w-common.x86_64 php55w-gd.x86_64 php55w-ldap.x86_64 php55w-mbstring.x86_64 php55w-mcrypt.x86_64 php55w-mysql.x86_64 php55w-pdo.x86_6

yum install php56w.x86_64 php56w-cli.x86_64 php56w-common.x86_64 php56w-gd.x86_64 php56w-ldap.x86_64 php56w-mbstring.x86_64 php56w-mcrypt.x86_64 php56w-mysql.x86_64 php56w-pdo.x86_64

注:如果想升级到5.6把上面的55w换成56w就可以了。

yum install php70w.x86_64 php70w-cli.x86_64 php70w-common.x86_64 php70w-gd.x86_64 php70w-ldap.x86_64 php70w-mbstring.x86_64 php70w-mcrypt.x86_64 php70w-mysql.x86_64 php70w-pdo.x86_64
  1. 安装PHP FPM
yum install php55w-fpm 
yum install php56w-fpm 
yum install php70w-fpm

注:如果想升级到5.6把上面的55w换成56w就可以了。

概念了解:CGI,FastCGI,PHP-CGI与PHP-FPM

本文转载自 简明现代魔法:http://www.nowamagic.net/librarys/veda/detail/1319/

CGI

CGI全称是“公共网关接口”(Common Gateway Interface),HTTP服务器与你的或其它机器上的程序进行“交谈”的一种工具,其程序须运行在网络服务器上。

CGI可以用任何一种语言编写,只要这种语言具有标准输入、输出和环境变量。如php,perl,tcl等。

Continue reading "概念了解:CGI,FastCGI,PHP-CGI与PHP-FPM"

symony入门教程

安装

想了一想还是说一下怎么快速安装吧,请记得仔细看symfony.com的手册.如果你英文不是很好,请看我是怎么安装的:

下载symfony.phar文件,浏览器就能下载:http://symfony.com/installer

将此文件移动到你的web目录,cmd中cd到web目录,输入如下命令:

php symfony.phar

如果没有出现错误就可以创建你的第一个应用了,这样就创建了一个名字为symfony的应用。

php symfony.phar new symfony

建议同时也把symfony demo也装好

php symfony.phar demo

如果你一切都弄好了,hosts改好了,http.vhosts.conf也改好了[这个如果你不会的话建议百度关键词:windows xampp wamp apache 虚拟域名配置],那么你可以用你的域名访问默认页面,我的域名是 symfony.dev

我安装的symfony有一个bug,默认页的css没有被加载下来,这样的话你的应用如果出现错误了,提示【debug】页面将很难看,建议还是按照下面的方法处理一下:将 symfony demo项目的/web/bundles/下面的两个目录复制到你项目的同级目录,这样默认页就可以正常显示了:

symfony入口

symfony一切的开始应该是从appkernel【/app/AppKernel.php】这个类开始的,在app.php和app_dev.php中都有实例化这个类,而这两个文件正是项目的入口文件:

app_dev.php :

$kernel = new AppKernel('dev', true);

app.php:

$kernel = new AppKernel('prod', false);

看到参数dev【开发环境】,prod【生产环境】一切就不言而喻了吧。

appkernel干嘛用的呢?注册bundle用的,我们都知道,symfony一切皆bundle,连自己的核心代码都写在bundle里面,用户的应用也是放在bundle里面的,看AppKernel类,它继承了Kernel类,而Kernel类实现了两个接口,KernelInterface, TerminableInterface。

现在你可以开始对symfony demo熟悉了一下 【demo的安装方法在你安装symfony的CLI中都有明确的说明】,熟悉一下后可以开始尝试创建自己的bundle.

创建bundel

(创建bundle的命令请参见手册,或者你目前也可以跳过这一步使用默认的Appbundle)

如果你的bundle使用的是annotation格式的路由,请在控制器的开头加上

use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;

如果你使用的是phpstrom,它会提示里这个命名空间没有被使用,这是正常的,因为你的路由写在注释里面

进阶教程

更好的模板赋值方法

现在要说说twig和smarty这两个模板引擎,symfony自带的是自己研发的twig,如果熟悉了smarty的小伙伴可能不习惯用symfony的$this->render(‘模板名’,array(‘变量名’ => ‘变量值’))这样的模板赋值的方法,或者我们在渲染模板的时候需要对变量做判断,进行其他处理,现在使用如下方法可以$this->assgin(‘变量名’,‘变量值’)然后再$this->render()渲染模板:

定义一个CommonController.php放在DefaultController.php同级目录,让他继承Controller.php[注意命名空间的引用,不然会报找不到类Controller之类的错误],然后DefaultController.php继承CommonController.php

在CommonController 添加属性protected $parameters;

创建赋值的方法:

public function assign($key, $value) {
    $this->parameters[$key] = $value;
}

关键的一步:重写render方法,:

public function render($view = '', array $parameters = array(), Response $response = null) {
    $view = $this->getDefaultView($view);
    $parameters = array_merge($this->parameters, $parameters);
    return parent::render($view, $parameters, $response);

我这里$views可以为空,因为有getDefaultView查找默认模板,相信你也会写一个查找默认模板的函数把。

简单介绍一下我安装laravel的过程

这篇文章介绍了composer安装laravel的方法,对初学者有一定的帮助,也给自己做个笔记。

首先,安装composer,但是安装composer之前你得有php环境,这个你肯定是有的。

下载composer

安装,直接点下一步就可以了,安装有的时候由于GFW的原因,网络不佳,此时你需要一款VPN(翻墙)的软件。

打开cmd,输入composer,

c

显示这个说明你安装成功了,然后安装通过composer安装laravel,继续cmd cd到你需要放置laravel的路径(一般是你服务器的根路径),输入:

composer createproject laravel/laravel yourprojectname

或者:composer createproject laravel/laravel=5.0.*  yourprojectname –prefer -dist

5.0.*表示版本号, –prefer  -dist 表示优先使用压缩版本,以提升下载速率

等待安装,这需要一点时间,其实也不长,耐心等待。

然后可以配置虚拟域名了

修改hosts文件:

2

配置apache:

3

 

documentRoot按照你安装的路径来写,不一定是我这样子的哦,

然后浏览器打开 laravel.dev:

4

恭喜你,安装成功!

 

php文件操作

下面是一些常用函数和代码块,可以配合使用,比如一键删除某个目录下的文件,或者批量创建文件(对于需要创建缩略图的应用很有必要),或者读取文件内容,以及客户各种撩骚的要求:

basename(string  $filename)

返回filename此文件的文件名部分;


dirname(string  $filename)

返回filename此文件所在的绝对路径部分,不包括结尾’/’;


unlink(string $filename),rmdir()

删除文件,删除文件夹


file_get_contents(string $path)

返回由$path指定的文件内容,可以是网络地址,如file_get_contents('http://www.baidu/.com');


dir(string  $directory)

打开$directory指定的路径,并返回一个对象。这个对象包含三个方法:read() , rewind() 以及 close()
若成功,则该函数返回一个目录流,否则返回 false 以及一个 error。可以通过在函数名前加上 "@" 来隐藏 error 的输出。下面演示用这个函数遍历一个目录下面所有的文件和文件夹:


$dir = dir(“./images”);

while (($file = $dir->read()) !== false) {
    if ($file !== '.' and $file != '..') {
    echo 'file: ' . $file . "\n";
    }
}

$dir->close();

opendir() 

opendir() 函数打开一个目录句柄,可由 closedir()readdir()rewinddir() 使用。
若成功,则该函数返回一个目录流,否则返回 false 以及一个 error。可以通过在函数名前加上 "@" 来隐藏 error 的输出。实现的功能与dir()类似,不过dir()返回的是一个对象。

$dir = opendir(“images”);
while (($file = readdir($dir)) !== false)
{
    if ($file !== '.' and $file != '..') {
    echo “filename: ” . $file . "\n";
    }
}

closedir($dir);
?>

php 二维数组的遍历

意识到我对二维数组还不是很了解,是因为我正在看这段代码:

foreach($users_list as $key => $val)
{
if (!$val['url_token'])
{
$users_list[$key]['url_token'] = urlencode($val['user_name']);
}
}

本代码来自wecenter,很明显,如果把数组$user_list当作一维数组是行不通的,因为$val[‘url_token’]会让你不知所措,

我们都知道,二维数组的形式如下:

$arr = array(

‘first-sub’ => array(‘url_token’=>’jake’,’id’=>’1991′),

‘second-sub’ => array(‘url_token’=>’jake’,’id’=>’1991′),

)

很明显,每个foreach循环都把第一行当作一个结果赋值给$val,而$val有时候恰好又是一个数组,所以就导致了有

$users_list[$key]['url_token']
这样的写法,即是得到$user_list数组的所有子数组索引为'url_token'的元素