Heim  >  Artikel  >  php教程  >  PHP 系列:PHP Web 开发基础,phpweb

PHP 系列:PHP Web 开发基础,phpweb

WBOY
WBOYOriginal
2016-06-13 08:47:28913Durchsuche

PHP 系列:PHP Web 开发基础,phpweb

PHP是动态类型的Web开发的脚本语言,PHP以页面文件作为加载和运行的单元,PHP现在有了Composer作为开发包管理。

1.使用Composer管理依赖

自从.NET开发用了Nuget管理程序集依赖,我就再也离不开它了,幸亏Java中也有Maven管理jar包,虽然开源中国的镜像太慢但还有ibiblio的镜像可用,PHP现在终于有了Composer(参考1)用来管理资源包。

(1)全局安装(参考2)

在指定安装目录中执行命令行:

php -r <span>"</span><span>readfile('https://getcomposer.org/installer');</span><span>"</span> | php

在指定安装目录中执行命令行:

<span>echo</span> @php <span>"</span><span>%~dp0composer.phar</span><span>"</span> %*>composer.bat

将指定安装目录添加到环境变量的系统变量Path中。

(2)项目安装

在项目目录中执行命令行:

php -r <span>"</span><span>readfile('https://getcomposer.org/installer');</span><span>"</span> | php

使用 composer.json 文件配置依赖。如配置PHP中常用的日志组件:

<span>{
    </span>"require"<span>: {
        </span>"monolog/monolog": "1.0.*"<span>
    }
}</span>

使用命令行命令 php composer.phar install 安装依赖的资源包。如果进行了全局安装,只需要执行composert install。

这会将生成 composer.lock 文件并依赖下载资源包到 vendor 目录,composer.lock 文件是下载依赖时真正使用的文件。

(3)升级依赖

项目使用 composer.lock 文件维护依赖,如果我们需要使用更新版本的依赖,需要按需修改 composer.json 文件并执行更新命令。全局安装:composer update,项目安装使用:php composer.phar update。

(4)资源包查询与镜像

可以使用http://packagist.org检索资源包,好比.NET中的https://www.nuget.org/packages/和Java中的http://search.maven.org/。

可以使用http://packagist.phpcomposer.com镜像,全局配置使用如下命令行命令:

composer config -g repo.packagist composer http:<span>//</span><span>packagist.phpcomposer.com</span>

项目配置使用如下命令行:

composer config repo.packagist composer http:<span>//</span><span>packagist.phpcomposer.com</span>

当然最简单的方式是直接修改composer.config文件:

<span>{
    </span>"require"<span>: {
        </span>"monolog/monolog": "1.0.*"<span>
    },
    </span>"repositories"<span>: {
        </span>"packagist"<span>: {
            </span>"type": "composer"<span>,
            </span>"url": "http://packagist.phpcomposer.com"<span>
        }
    }
}</span>

(5)自动加载

Composert 在 vendor 目录下自动生成并维护包含了全部依赖信息的 autoload.php 文件。因此我们只需要通过 autoload.php 使用第三方库即可。例如:

<?<span>php 
</span><span>require</span> 'vendor/autoload.php'<span>;
</span><span>$log</span> = <span>new</span> Monolog\Logger('name'<span>);
</span><span>$log</span>->pushHandler(<span>new</span> Monolog\Handler\StreamHandler('app.log', Monolog\Logger::<span>WARNING));
</span><span>$log</span>->addWarning('Foo'<span>);
</span>?>

2.PHP基础

(1)PHP类似C语系语法的脚本语言。

如果你有C或C++语言的基础,那么很多概念和语法都可以直接对照。从大小写敏感到注释,从数据类型、函数、参数传递和成员引用等。从C/C++/Java/C#这一体系学习下来,再加上JavaScript脚本语言的基础,加点PHP的技能点水到渠成。

(2)PHP是动态类型语言。

PHP有和C语言等强类型语言一样的数据类型定义,支持的类型也相仿,只是PHP中同一变量在不同时刻可以表示不同类型的数据,但同一时刻,每个变量都相当于强类型中的指定类型的变量。因此对于PHP,更适合的称呼是动态类型。习惯使用Java/C#等强类型语言总会对动态类型的脚本语言心存焦虑,可以通过PHP的类型检查函数减少这方面的顾虑(is_bool\is_integer\is_double\is_string\is_null等)。

(3)PHP以页面文件方式运行。

无论如何使用PHP,PHP的都是以页面文件方式运行的,这和运行在浏览器端的JavaScript方式类似,JavaScript文件只有在被加载到当前页面才能引用和执行,PHP也只有在通过include或required方式加载后才能引用和执行,即使后续添加的 __autoload和spl_autoload依然只是简化而非改变了其加载引用的本质。

(4)PHP不需要复杂的框架

PHP天生是处理Web请求的,HTTP协议相关的内容是PHP的重点,一般来讲,除了纵向请求的处理,横向的认证和授权控制部分,其他部分不应该过于依赖PHP,如果通过耦合性较高的Web框架使用PHP本身就是错误的。由于PHP本身的运行和加载方式,导致PHP天生就适合复用各种组件而非使用框架来解决问题。成天寄希望于框架的人,要么是不想在PHP基础要么是不想在业务逻辑基础上下功夫。

3.PHP常用文件

(1)配置文件config.php

应用配置的各种信息定义在一个或多个配置文件中。一般每次请求都会加载配置文件,配置文件中不只包含了数据库连接信息,如应用MVC时,每次请求都会加载配置文件以便读取所有URL和Controller以及View之间的规则。

(2)入口文件index.php

处理首页请求或全部请求的文件。index.php在实现PHP的MVC时是天然的前段控制器FrontController,由index.php负责纵向的处理请求转发,横向的认证和授权等处理文件,等也需要在index.php中加载。

(3)数据访问文件database.php

database.php是工具类中最主要的用于数据访问的文件,为了避免数据访问中重复性出现的代码,一般的PHP应用程序都会独立的一个或一组数据访问文件。

4.自定义Session

在PHP中自定义Session比Java中方便多了,只需要将自定义的函数名称做为参数传递给session_set_save_handler($open, $close, $read, $write, $destroy, $gc)作为参数即可,我们自定义一个使用cookie作为存储的session,作为演示没有对数据长度进行验证,也没有使用对称加密解密。

<?<span>php

</span><span>function</span><span> open_session() {
    </span><span>return</span> <span>true</span><span>;
}

</span><span>function</span><span> close_session() {
    </span><span>return</span> <span>true</span><span>;
}

</span><span>function</span> read_session(<span>$id</span><span>) {
    </span><span>if</span> (<span>$_COOKIE</span>[<span>$id</span><span>]) {
        </span><span>return</span> <span>base64_decode</span>(<span>$_COOKIE</span>[<span>$id</span><span>]);
    }
    </span><span>return</span> ''<span>;
}

</span><span>function</span> write_session(<span>$sid</span>, <span>$data</span><span>) {
    </span><span>if</span> (<span>$_COOKIE</span>['session_end'<span>]) {
        </span><span>setcookie</span>(<span>$sid</span>, <span>base64_encode</span>(<span>$data</span>), <span>$_COOKIE</span>['session_end'<span>]);
    } </span><span>else</span><span> {
        </span><span>$start</span> = <span>time</span>() + <span>session_get_cookie_params</span>()['lifetime'<span>];
        </span><span>setcookie</span>('session_end', <span>$start</span>, <span>$start</span><span>);
        </span><span>setcookie</span>(<span>$sid</span>, <span>base64_encode</span>(<span>$data</span>), <span>$start</span><span>);
    }
    </span><span>return</span> <span>true</span><span>;
}

</span><span>function</span><span> destroy_session() {
    </span><span>$_Session</span> = <span>array</span><span>();
    </span><span>return</span> <span>true</span><span>;
}

</span><span>function</span><span> gc_session() {
    </span><span>return</span> <span>true</span><span>;
}

</span><span>ini_set</span>("session.cookie_lifetime", "3600"<span>);
</span><span>session_set_save_handler</span>('open_session', 'close_session', 'read_session', 'write_session', 'destroy_session', 'gc_session'<span>);
</span><span>session_start</span><span>();
</span><span>$_SESSION</span>['count'] += 1<span>;
</span><span>echo</span> <span>$_SESSION</span>['count'<span>];
</span><span>session_write_close</span><span>();
</span>?>

参考

(1)https://getcomposer.org/doc/00-intro.md

(2)http://docs.phpcomposer.com/00-intro.html

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn