开发属于自己的composer

1.新建一个git仓库
备注:可以在github建立,如果要建立私有的composer,可以自己搭建git仓库

2.初始化composer文件
执行composer init
参考:https://getcomposer.org/doc/04-schema.md
{
    "name": "joyousphper/composer-demo",
    "description": "composer demo",
    "type": "library",
    "license": "MIT",
    "authors": [
        {
          "name": "joyousphper",
          "email": "joyousphper@gmail.com"
        }
    ],
    "minimum-stability": "stable",
    "require": {
        "php": ">=5.4.0"
    },
    "autoload": {
        "psr-4": {
          "Tools\\": "src/Tools/"
        }
    }

}

3.编写代码并推送git仓库
新建src/Tools/Common.php
<?php
namespace Tools;

class Common
{
    public static function demo()
    {
        return 'hello world';
    }

}
添加标签
git tag -a v0.1.1 -m'第二个版本'
git push origin tag v0.1.1

4.提交composer
https://packagist.org/packages/submit

5.查看提交composer包
https://packagist.org/packages/joyousphper/composer-demo

6.设置composer自动更新
6.1打开https://github.com/JoyousPHPer/composer-demo/settings/installations添加一个Packagist服务
6.2https://github.com/JoyousPHPer/composer-demo/settings/hooks设置hook,这里的apitoken可以从https://packagist.org/profile/查看

7.项目引用
{
    "name": "joyousphper/demo1",
    "description": "composer demo",
    "type": "project",
    "license": "MIT",
    "authors": [
        {
          "name": "joyousphper",
          "email": "joyousphper@gmail.com"
        }
    ],
    "minimum-stability": "dev",
    "require": {
        "joyousphper/composer-demo": "v0.1.*"
    }
}

8.使用案例
<?php
require __DIR__ . '/../vendor/autoload.php';
use Tools\Common;

echo Common::demo();



mac下mcrypt扩展解决

如果使用php自带的加密算法,其中需要这个mcrypt扩展,各种编译通不过。。后来干脆下在一个

点击下载mcrypt.so

然后修改

sudo vi /etc/php.ini

添加:(记住把你下载那个so放在这个目录里面!)

extension_dir=”/usr/lib/php/extensions/no-debug-non-zts-20090626/”
extension=mcrypt.so

然后重启apache即可

经典笔试题目[算法篇]

php 
/**
 * 两个已经按照从大到小排序的数组,元素个数不确定
 * 仅使用一次循环,找出其中相等元素并输出(使用空格分开)
*/
$a = array(123,110,100,98,76,56,44,23,12);
$b = array(123,100,98,56,44,33,22,11);
$bNum = count($b);//计算b的个数
$aNum = count($a);//计算a的个数
$i = $j = 0;
while ($i < $aNum && $j < $bNum) {
   if ($a[$i] < $b[$j]) { 
       ++$j;    
    } else if ($a[$i] == $b[$j]) { 
       echo $a[$i]." ";        
       $i++;        
       $j++;    
    } else {        
        ++$i;    
    }  
} 
?>

方案二:

 $v) {
    if ($v == 2) {
        echo $k.' ';
    }
}
?>

算法,需要不停的积累,日复一日,年复一年!

Zend FrameWork 配置文件(初级版)

[production]
;命名空间配置以及自动命名空间注册
autoloadernamespaces[] = “Zend_”
autoloadernamespaces[] = “Paper_”
appnamespace = “Application”
;运行时设置
phpSettings.display_startup_errors = 1
phpSettings.display_errors = 1
phpSettings.DATE.timezone =”Asia/Shanghai”
;zend类库目录设置
includePaths.library = APPLICATION_PATH “/../library”
;引导文件配置,其中第二句可以省略
bootstrap.path = APPLICATION_PATH “/Bootstrap.php
bootstrap.class = “Bootstrap”
;前端控制器、默认模块、模块分组配置
resources.frontcontroller.moduledirectory = APPLICATION_PATH “/modules”
resources.frontController.controllerDirectory = APPLICATION_PATH “/controllers”
resources.frontcontroller.defaultModule = “default”
;为了统一模块类名,这里需要设置默认模块前缀需要带上
resources.frontcontroller.params.prefixDefaultModule = true
;程序运行异常配置
resources.frontcontroller.throwexceptions = true
resources.frontController.params.displayExceptions = 1
;配置layout布局文件
resources.layout.layoutPath = APPLICATION_PATH “/layouts”
;数据库连接设置
resources.db.adapter = “PDO_MYSQL”
resources.db.isdefaulttableadapter = true
resources.db.params.dbname = “Joyous
resources.db.params.username = “Joyous
resources.db.params.password = “123456”
resources.db.params.host = “localhost”
resources.db.params.charset = “UTF8”

Zend_Config使用笔记

1.zend_Config被设计在应用程序中简化访问和使用配置数据。它为在应用程序代码中访问这样的配置数据提供了一个基于用户接口的嵌入式对象属性。配置数据可能来自于各种支持等级结构数据存储的媒体

// 给出一个配置数据的数组
$configArray = array(
‘webhost’ => ‘localhost’,
‘database’ => array(
‘adapter’ => ‘pdo_mysql’,
‘params’ => array(
‘host’ => ‘localhost,
‘username’ => ‘dbuser’,
‘password’ => ‘secret’,
‘dbname’ => ‘mydatabase’
)
)
);

// 基于配置数据创建面向对象
$config = new Zend_Config($configArray);

// 输出配置数据 (结果为’localhost’中)
echo $config->webhost;

// 使用配置数据来连接数据库
$db = Zend_Db::factory($config->database->adapter,
$config->database->params->toArray());

// 另外的用法:简单地传递 Zend_Config 对象。
// Zend_Db factory 知道如何翻译它。
$db = Zend_Db::factory($config->database);

PS:还可这样使用
// config.php
return array(
‘webhost’ => ‘localhost’,
‘database’ => array(
‘adapter’ => ‘pdo_mysql’,
‘params’ => array(
‘host’ => ‘localhost’,
‘username’ => ‘dbuser’,
‘password’ => ‘secret’,
‘dbname’ => ‘mydatabase’
)
)
);
然后$config = new Zend_Config(require ‘config.php’);

Continue reading

$_PUT?put数据获取

我们经常使用$_GET和$_POST来进行服务器交互,但是我们有的时候不得不被逼使用$_PUT方法获取数据
当然,php中是没有$_PUT的,但是我们可以使用 $_SERVER[‘REQUEST_METHOD’]来判断,因为我们这个服务器变量会是PUT
这样我们十一哦那个parse_str就可以分割开put的变量
put.php页面代码
$_PUT = array();
if (‘PUT’ == $_SERVER[‘REQUEST_METHOD’]) {
parse_str(file_get_contents(‘php://input’), $_PUT);
}
print_r($_PUT);
其中:parse_str() 函数把查询字符串解析到变量中。
而我们如何知道自己的$_PUT能用吗?
linux命令行下执行:
curl -X PUT http://localhost/put.php -d “id=12” -d “title=内容为中文”
显示:
Array
(
[id] => 12
[title] => 内容为中文
)
附:put再也不怕了~

 

if和else匹配问题以及switch问题

$b = 1;
$a = 2;
if ($a > 1) {
echo ‘1’;
if ($b > 2) {
echo ‘2’;
}
} else {
echo ‘3’;
}

这样的代码是很规范的,但是,如果你不带{}的括号,你执行之后显示的结果会让你很纠结的~~我认为else匹配最近的一个if,问题就在这里!原来不带{}的时候会这样子滴。

然后说一个switch问题的比较问题

$a = 5;
switch ($a) {
case $a > 3:
echo ‘大于3’;
break;
case $a == 3:
echo ‘等于3’;
break;
case $a < 3:
echo ‘小于3’;
break;
}

然后我们把$a = 5改成$a = 0;然后会看到~~(你先想想)

结果竟然是!!大于3!!

然后我们再做点调整再$a = 5改成$a = 2.0,这样我们就会看到~~唉,还是你自己写出来看看吧

其实有的时候结果是和你想像的不一样的~~注意Swtich的语法

PS:工作原理:首先设置表达式 n(通常是一个变量)。随后表达式的值会与结构中的每个 case 的值做比较。如果存在匹配,则与该 case 关联的代码块会被执行。请使用 break 来阻止代码自动地向下一个 case 运行。

也就是说switch中的case是确定的值而不是进行比较的值!很好玩吧?