日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > php >内容正文

php

php phar包require报错,被遗忘的PHP5.3新特性——Phar

發布時間:2024/1/23 php 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 php phar包require报错,被遗忘的PHP5.3新特性——Phar 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

看樣子phar應該是山寨jar的吧,不過方便的確是方便許多。使用phar打包PHP代碼的話,就可以直接在網上下載phar包,然后像這樣直接運行他!

$ php foo.phar

我在本地自己做了個測試。建立了一個foo目錄,目錄里面有Foo.class.php和index.php兩個文件:

// Foo.class.php

class Foo

{

public function __construct()

{

echo 'A Foo is created', PHP_EOL;

echo 'and the current dir is ', __DIR__;

}

}

// index.php

require __DIR__.'/Foo.class.php';

$foo = new Foo();

然后再寫一個打包腳本來生成foo.phar文件:

// archive.php

// 要打包是需要在php.ini設置phar.readonly = off的,默認是on

$phar = new Phar('foo.phar', 0, 'foo.phar');

$phar->buildFromDirectory(__DIR__.'/foo');

執行

$ php archive.php

后當前目錄下會多了一個foo.phar文件,這個時候執行php foo.phar,會發現跟執行php foo/index.php差不多的效果。PHP會自動將index.php作為phar包的bootstrap文件。

但是和直接執行foo/index.php有所區別的是,直接執行__DIR__顯示的是/path/to/foo而執行phar包顯示的是phar:///path/to/foo.phar,這說明執行phar包的時候PHP把.phar文件也當成一個目錄,所以只要phar里面提到的文件路徑都是用__DIR__來獲取的話,phar隨便放什么路徑都是可以正確執行而不會出現路徑問題的。

另外我發現如果index.php的require路徑不用__DIR__常量而使用require './Foo.class.php',這樣打包之后執行是會報錯的,如果要做支持打包的程序,這點必須要注意。

對于打包大家應該都比較關心的問題是打包之后的性能問題。我在網上看到一個測試:http://marc.info/?l=php-internals&m=121394601217048&w=2,得出的結論是:打不打包對性能幾乎沒有任何的影響,無論你用不用APC什么的緩存技術。

下面再說說phar對于PHP程序設計的影響。我認為一個很大的影響是配置文件將更顯現出他的重要地位。像PHP這種解釋性的腳本語言,雖然我自己要設計程序的話配置文件我還是會習慣盡量和程序獨立出來,但是我并不反對在某些邏輯代碼里面直接寫一些參數,只要能做到以后修改參數只用修改一處就行。我之所以這么認為是因為這本來就是解釋性腳本語言相對于修改完一處代碼就要重新編譯的靜態語言的一個大優點。不過phar這個東西相當于是個linker,剛才說的那個好處在使用phar之后就立馬沒有了,所以一個或者幾個放在phar文件外面的配置文件就顯得特別重要,特別是當你在代碼里面使用Dependency Injection的時候,很有必要在phar外面放一個service container的描述文件來保持代碼的靈活性。

總結

以上是生活随笔為你收集整理的php phar包require报错,被遗忘的PHP5.3新特性——Phar的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。