- 浏览: 7845270 次
- 性别:
- 来自: 广州
文章分类
- 全部博客 (2425)
- 软件工程 (75)
- JAVA相关 (662)
- ajax/web相关 (351)
- 数据库相关/oracle (218)
- PHP (147)
- UNIX/LINUX/FREEBSD/solaris (118)
- 音乐探讨 (1)
- 闲话 (11)
- 网络安全等 (21)
- .NET (153)
- ROR和GOG (10)
- [网站分类]4.其他技术区 (181)
- 算法等 (7)
- [随笔分类]SOA (8)
- 收藏区 (71)
- 金融证券 (4)
- [网站分类]5.企业信息化 (3)
- c&c++学习 (1)
- 读书区 (11)
- 其它 (10)
- 收藏夹 (1)
- 设计模式 (1)
- FLEX (14)
- Android (98)
- 软件工程心理学系列 (4)
- HTML5 (6)
- C/C++ (0)
- 数据结构 (0)
- 书评 (3)
- python (17)
- NOSQL (10)
- MYSQL (85)
- java之各类测试 (18)
- nodejs (1)
- JAVA (1)
- neo4j (3)
- VUE (4)
- docker相关 (1)
最新评论
-
xiaobadi:
jacky~~~~~~~~~
推荐两个不错的mybatis GUI生成工具 -
masuweng:
(转)JAVA获得机器码的实现 -
albert0707:
有些扩展名为null
java 7中可以判断文件的contenttype了 -
albert0707:
非常感谢!!!!!!!!!
java 7中可以判断文件的contenttype了 -
zhangle:
https://zhuban.me竹板共享 - 高效便捷的文档 ...
一个不错的网络白板工具
在PHP 5.3中,引入了类似JAVA的JAR之类的打包文件机制.Phar 归档的概念来自 Java™ 技术的 JAR 归档,它允许使用单个文件打包应用程序,这个文件中包含运行应用程序所需的所有东西。该文件不同于单个可执行文件,后者通常由编程语言生成,比如 C,因为该文件实际上是一个归档文件而非编译过的应用程序。因此 JAR 文件实际上包含组成应用程序的文件,但是考虑到安全性,不对这些文件进行仔细区分。Phar 扩展正是基于类似的理念,但是在设计时主要针对 PHP 的 Web 环境。同样,与 JAR 归档不同的是,Phar 归档可由 PHP 本身处理,因此不需要使用额外的工具来创建或使用。
Phar 扩展对 PHP 来说并不是一个新鲜的概念。它最初使用 PHP 编写并被命名为 PHP_Archive,然后在 2005 年被添加到 PEAR 库。然而在实际中,解决这一问题的纯 PHP 解决方案非常缓慢,因此 2007 年重新编写为纯 C 语言扩展,同时添加了使用 SPL 的 ArrayAccess 对象遍历 Phar 归档的支持。自那时起,人们做了大量工作来改善 Phar 归档的性能。
下面例子讲解下:
首先是classes目录下的Samplecalss.php:
<?
class SampleClass {
var $sName;
var $sVersion;
// constructor
function SampleClass() {
$this->sName = 'I am Sample class';
$this->sVersion = '1.0.0';
}
function getAnyContent() {
return '<h1>Hello World from Sample class</h1>';
}
function getContent2() {
return '<h2>Get content 2</h2>';
}
}
?>
另外一个:
<?
class SampleClass2 extends SampleClass {
// constructor
function SampleClass2() {
$this->sName = 'I am Sample class 2';
$this->sVersion = '1.0.2';
}
function getAnyContent() {
return '<h1>Hello World from Sample class 2</h1>';
}
}
?>
再搞一个INDEX.PHP
<?
require_once('SampleClass.php');
require_once('SampleClass2.php');
?>
现在,是想把class目录下的这些文件都打成phar的格式,我们得建立一个lib目录
,主文件
<?
$sLibraryPath = 'lib/SampleLibrary.phar';
// we will build library in case if it not exist
if (! file_exists($sLibraryPath)) {
ini_set("phar.readonly", 0); // Could be done in php.ini
$oPhar = new Phar($sLibraryPath); // creating new Phar
$oPhar->setDefaultStub('index.php', 'classes/index.php'); // pointing main file which require all classes
$oPhar->buildFromDirectory('classes/'); // creating our library using whole directory
$oPhar->compress(Phar::GZ); // plus - compressing it into gzip
}
// when library already compiled - we will using it
require_once('phar://'.$sLibraryPath.'.gz');
$oClass1 = new SampleClass();
echo $oClass1->getAnyContent();
echo '<pre>';
print_r($oClass1);
echo '</pre>';
$oClass2 = new SampleClass2();
echo $oClass2->getAnyContent();
echo $oClass2->getContent2();
echo '<pre>';
print_r($oClass2);
echo '</pre>';
?>
输出如下;
Hello World from Sample class
SampleClass Object
(
[sName] => I am Sample class
[sVersion] => 1.0.0
)
Hello World from Sample class 2
Get content 2
SampleClass2 Object
(
[sName] => I am Sample class 2
[sVersion] => 1.0.2
)
由于要创建自己的打包phar,因此phar.readonly要设置为0,
使用的时候,可以用:
phar://来进行引用
两个很好的phar介绍学习资料:
http://www.ibm.com/developerworks/cn/opensource/os-php-5.3new4/
http://www.slideboom.com/presentations/26182/PHP-5.3-Part-3---Introducing-PHAR
Phar 扩展对 PHP 来说并不是一个新鲜的概念。它最初使用 PHP 编写并被命名为 PHP_Archive,然后在 2005 年被添加到 PEAR 库。然而在实际中,解决这一问题的纯 PHP 解决方案非常缓慢,因此 2007 年重新编写为纯 C 语言扩展,同时添加了使用 SPL 的 ArrayAccess 对象遍历 Phar 归档的支持。自那时起,人们做了大量工作来改善 Phar 归档的性能。
下面例子讲解下:
首先是classes目录下的Samplecalss.php:
<?
class SampleClass {
var $sName;
var $sVersion;
// constructor
function SampleClass() {
$this->sName = 'I am Sample class';
$this->sVersion = '1.0.0';
}
function getAnyContent() {
return '<h1>Hello World from Sample class</h1>';
}
function getContent2() {
return '<h2>Get content 2</h2>';
}
}
?>
另外一个:
<?
class SampleClass2 extends SampleClass {
// constructor
function SampleClass2() {
$this->sName = 'I am Sample class 2';
$this->sVersion = '1.0.2';
}
function getAnyContent() {
return '<h1>Hello World from Sample class 2</h1>';
}
}
?>
再搞一个INDEX.PHP
<?
require_once('SampleClass.php');
require_once('SampleClass2.php');
?>
现在,是想把class目录下的这些文件都打成phar的格式,我们得建立一个lib目录
,主文件
<?
$sLibraryPath = 'lib/SampleLibrary.phar';
// we will build library in case if it not exist
if (! file_exists($sLibraryPath)) {
ini_set("phar.readonly", 0); // Could be done in php.ini
$oPhar = new Phar($sLibraryPath); // creating new Phar
$oPhar->setDefaultStub('index.php', 'classes/index.php'); // pointing main file which require all classes
$oPhar->buildFromDirectory('classes/'); // creating our library using whole directory
$oPhar->compress(Phar::GZ); // plus - compressing it into gzip
}
// when library already compiled - we will using it
require_once('phar://'.$sLibraryPath.'.gz');
$oClass1 = new SampleClass();
echo $oClass1->getAnyContent();
echo '<pre>';
print_r($oClass1);
echo '</pre>';
$oClass2 = new SampleClass2();
echo $oClass2->getAnyContent();
echo $oClass2->getContent2();
echo '<pre>';
print_r($oClass2);
echo '</pre>';
?>
输出如下;
Hello World from Sample class
SampleClass Object
(
[sName] => I am Sample class
[sVersion] => 1.0.0
)
Hello World from Sample class 2
Get content 2
SampleClass2 Object
(
[sName] => I am Sample class 2
[sVersion] => 1.0.2
)
由于要创建自己的打包phar,因此phar.readonly要设置为0,
使用的时候,可以用:
phar://来进行引用
两个很好的phar介绍学习资料:
http://www.ibm.com/developerworks/cn/opensource/os-php-5.3new4/
http://www.slideboom.com/presentations/26182/PHP-5.3-Part-3---Introducing-PHAR
发表评论
-
11个php日常用的小tips 代码片段
2014-01-21 20:34 1887http://www.phpzag.com/11-useful ... -
php中的DirectoryIterator和RecursiveDirectoryIterator
2013-07-27 22:50 3472php中,可以用用DirectoryIterator获取指定目 ... -
uccenter中找回创始人密码
2013-03-11 19:12 1865偶然忘记了uccenter中的创始人密码,一查看,其实找回 ... -
php中通过register_shutdown_function记录fatal error
2013-02-09 23:56 2927今天发现php中,如果要记录fatal error的时候, ... -
php中检查是否ajax请求
2013-01-19 09:53 1440$ajax = false; if(!empty ... -
php中检查某个网页地址是否有效能被打开的最简单方法
2012-10-22 16:18 2057php中检查某个网页地址是否有效能被打开的最简单方法,其实可以 ... -
小结几个php操作office的类库
2012-07-20 19:16 19001 phpexcel 最强大完整的类库了,地址在: ht ... -
介绍几个PHP的开源不错的图片类库
2012-07-14 13:11 2841介绍几个PHP的开源不错的图片类库 1 pchart ... -
php中__sleep和__wakeup
2012-06-22 09:39 4479在php中,__sleep和___wakeup是两个分别自 ... -
PHP 5.4正式版重要新特性
2012-05-25 08:34 1625原文发表在:http://tech.it168.com/a20 ... -
用php实现备份数据库ZIP及导出
2012-04-17 08:59 1803经常在有的PHP开源系统中,看到有备份数据库并导出的方法 ... -
PHP Codeigniter 中的_remap方法简介
2012-04-05 21:06 4531在Codeigniter 中,其实有个容易忽略掉的不错的控 ... -
PHP 5.4中的traits初探
2012-04-01 19:57 5002PHP 5.4中的traits,是新引入的特性,中文还真不知道 ... -
php中的pdo和mysqli的对比选择
2012-03-10 22:25 7111在PHP中,如何选择PDO和mysqli呢?本文做个简单的 ... -
php 5.4中新增加对session状态判断的功能
2012-02-20 12:28 3917在以前的php 版本中,要判断session是否有效,只能 ... -
php curl的几段小应用
2012-02-07 10:10 1774php 的CURL是不错的功能,下面收藏几段不错的片段 1 ... -
php 5.3中的一个type hinting的用法
2012-01-20 11:50 2267今天偶然看php 5.3中的一个特性,叫type hintin ... -
cakephp的分页排序
2012-01-04 10:38 4200cakephp中的分页还是很简单的,下面例子复习下 1 数据 ... -
mongodb+php学习1
2012-01-03 11:51 51841 mongodb启动时,设置启动项 C:\>mon ... -
php中挺好用的strtotime方法
2011-12-20 11:32 1916在PHP中,经常要对日期进行计算,比如要计算一个月前的日期 ...
相关推荐
php_phar.zip php_phar.zip php_phar.dll 各种版本的组件都有
php 安装插件类用的 可以直接require 搜索名称和版本,直接安装
composer.phar php的工具包管理
php5以上版本中都没有go-pear.phar,需要自行下载到目录并运行,注意配置时目录要选择all,目录自行设置,默认目录有重复,会产生错误。
将 composer.phar 复制到 PHP 的安装目录下面,也就是和 php.exe 在同一级目录。 在 PHP 安装目录下新建一个 composer.bat 文件,并将下列代码保存到此文件中。 复制 @php "%~dp0composer.phar" %* 最后重新打开一个...
PHP 匿名函数与注意事项 PHP5.2 以前:autoload, PDO 和 MySQLi, 类型约束 PHP5.2:JSON 支持 PHP5.3:弃用的功能,匿名函数,新增魔术...现在基本上都使用PHP5.3以后的版本,但是感觉普遍一个现象就是很多新特性,过了
PHP5.3之后支持了类似Java的jar包,名为phar。用来将多个PHP文件打包为一个文件。 首先需要修改php.ini配置将phar的readonly关闭,默认是不能写phar包的,include是默认开启的。 phar.readonly => On 创建一个phar...
php-cs-fixer v2.16.3,来源 https://github.com/friendsofphp/php-cs-fixer
php圈复杂度 phploc.phar
由于很多时候无法直接下载composer.phar文件,安装composer最后都会失败。现在提供完美使用的composer.phar,希望可以帮助到大家
A simple JSON example:require 'Nature.phar'; class index extends Nature\Controller { function get() { return ["msg"=>"Hello World"]; } }displays:{"msg":"Hello World"} 标签:...
ATOM 编辑器代码格式化插件
$ php composer.phar require jowy/online:@stable 用法 <?php use Online \ Online ; $ online = new Online ( 'your-api-token-here' ); $ abuse = $ online -> abuse (); $ network = $ online -> network ();...