php編譯dll
『壹』 php調用dll文件裡面的函數
1、首先從www.php.net網站上下載php源碼,此處以php-5.2.17版本為例,下載後解壓至E:盤根目錄下(目錄可以自己隨意定)。
2、下載安裝VC++ 6.0,因為PHP源碼是利用6.0版本寫的,所以使用這個版本編譯不會出現意外,別的版本未測試。
3、把VC++ 6.0安裝目錄中的 Microsoft Visual Studio\Common\MSDev98\Bin 絕對路徑添加到系統環境變數中。
4、進入E:\php-5.2.17\ext目錄,復制skeleton文件夾,並重命名為要開發擴展的名字,本例為「myfun」。
5、重命名skeleton.c為myfun.c,skeleton.dsp為myfun.dsp
6、編輯myfun目錄中的php_skeleton.h、myfun.c、myfun.dsp這三個文件,替換內容中所有extname為myfun,EXTNAME為MYFUN。(一定要嚴格區分大小寫)
下面就進入到編碼階段:
7、打開php_skeleton.h文件(頭文件),找到PHP_FUNCTION(confirm_myfun_compiled);,在 PHP_FUNCTION(confirm_myfun_compiled);,下面編寫PHP_FUNCTION(mb_MessageBox);,聲 明一個mb_MessageBox函數,此函數的作用僅是輸出js彈出一個alert消息框,用於測試。
8、下面定義函數入口,打開myfun.c文件,找到PHP_FE(confirm_myfun_compiled,NULL) ;,在下面編寫 PHP_FE(mb_MessageBox,NULL),此處注意一下,PHP_FE是定義的一個宏,所以後面不用加引號。
9、在myfun.c最後面編寫函數的實體部分:
PHP_FUNCTION(mb_MessageBox)
{
char *arg = NULL;
int arg_len, len;
char *strg;
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &arg, &arg_len) == FAILURE) {
return;
}
len = spprintf(&strg, 0, "<script>alert('%s')</script>",arg); //此處正是輸入的js代碼
RETURN_STRINGL(strg, len, 0);
}
到這代碼書寫就完成了,下面開始編譯:
10、開始->運行,輸入CMD,打開命令行窗口。
11、進入myfun的目錄,輸入 msdev myfun.dsp /MAKE "myfun - Win32 Release_TS",回車編譯。
12、如果沒有錯誤,在E:\php-5.2.17下會生成一個Release_TS文件夾,在裡面就可以找到php_myfun.dll文件。
至此擴展dll開發完成,下面在php中進行測試:
13、把php_myfun.dll復制到原php目錄中的ext文件夾內。
14、打開php.ini文件,添加當前dll的擴展 extension=php_myfun.dll
15、重啟apache,在網站目錄下新建一文件,輸入以下內容:
<?php
echo mb_MessageBox("測試PHP擴展DLL by 馬犇");
?>
瀏覽即可看到效果
『貳』 windows下開發並編譯PHP擴展的方法
現在就簡單說一在WINDOWS下開發PHP擴展的步驟:
首先需要准備的軟體有:
cygwin
安裝路徑e:\app\cygwin
visual
studio
C++
6.0,
修改環境變數,把已經安裝好的PHP路徑設置為環境變數。在這里,假設我的PHP安裝目錄是:e:\app\php5.2.5,那麼我把WINDOWS環境變數後面加上這個安裝目錄。方便一會兒使用php.exe。
PHP源代碼,這里假設為e:\c_source_code\php-5.2.5
1、修改文件
「PHP源文件目錄/ext/ext_skel_win32.php」,在這里就是:E:\c_source_code\php-5.2.5\ext,其中主要是修改其中的cygwin路徑。$cygwin_path
=
'e:\app\cygwin\bin';
把$cygwin_path修改為你實際安裝cygwin的路徑。
2、在源代碼ext目錄也就是e:\c_source_code\php-5.2.5\ext下,執行
php
ext_skel_win32.php
--extname=<EXT_NAME>,此時會在ext目錄下生成<EXT_NAME>目錄,這個目錄就是我們將要進行PHP擴展開發的框架。比如你運行php.exe
ext_skel_win32.php
--extname=foo,會在ext目錄下生成foo目錄。
3、將php-root\dev\php5ts.lib拷貝至
「ext/<EXT_NAME>」中。比如你要開發的PHP擴展名為foo,那麼就需要把php-root\dev\php5ts.lib拷貝到PHP源文件目錄\ext\foo中。
4、修改foo.c內容,編寫我們需要的C代碼。
5、進入<EXT_NAME>目錄,打開<EXT_NAME>.dsp。
設置VC6工程,
設置菜單「組建」->「移除工程配置」,選中「Win
32
Release_TS」,
設置菜單「工程」,選中「Win
32
Release_TS」
打開Tab「連接」,設置「輸出文件名」中的目錄,
[可選]打開Tab「C/C++」,增加「預處理器定義」「,COMPILE_DL_<EXT_NAME>」(注意全大寫,默認加入的),取消預定義「LIBZEND_EXPORTS」(否則不可引入zend函數)。
6、設置好以後,進行編譯,會生成一個dll文件,文件名是<EXT_NAME>.dll,比如在我們的例子中就為foo.dll
把foo.dll拷到e:\app\ext目錄下,並在php.ini里加上一行extension=foo.dll,重啟一下apache,查看phpinfo();,會發現我們的PHP擴展foo()已經載入進來,已經可以使用這個foo擴展了。
『叄』 怎樣把PHP代碼編譯成DLL文件
在大型機數據集中每一行就代表一條記錄
那麼就可以不用分別讀取,並且我還真的沒有試過分別讀取
先假定你的輸入文件記錄長度為80
你可以直接把輸入文件定義為
FD FILE1
........
.
01 INPUT-REC PIC X(80).
這樣讀取進來
然後就可以通過
UNSTRING INPUT-REC
DELIMITED BY SPACE
INTO 變數。
這樣來實現讀取。
而第一行為了轉化為數字,可用FUNCTION NUMVAL(變數)
這樣把字元形式轉化為數字
這樣就可可以了
如果還不懂就問吧
補充:數據集長度的大小不確定
在大型機裡面數據集是以記錄為單位來存放的,一行就是一個記錄
如果是定長,比如80,那麼在FD 下INPUT-REC PIC X(80)
變長要復雜點
那麼不管一行是多少,比如記錄長度是80,格式是fb
那麼第一行是9(5),就是存放的5個數字
比如 12345----------數字後面就是空格
其他行是X(6)那麼
比如ABCDEG------------字元後面也是空格
我們把輸入文件對應的記錄定義為
INPUT-REC PIC X(80)
那麼我們想要取得前面的東西就可以
UNSTRING INPUT-REC
DELIMITED BY SPACE
INTO 變數
要不你把題目描述具體些,寫出來,我來把代碼寫一下
『肆』 PHP文件是什麼文件怎麼打開
PHP是一種非常流行的WEB程序語言,超級文本預處理語言,其他的還有ASP,JSP等。簡單的說.PHP就是嵌入這種語言後的一個動態網頁文件。
四種打開php格式文件方法:
首先我們來看php文件是什麼文件,PHP是一個網頁腳本,文件後綴名為.php,
php文件打開方式一:用記事本打開
右擊.php文件,選擇記事本打開,就可以看到文件代碼啦!
php文件打開方式二:用Dreamweaver打開
Dreamweaver是網頁編輯器,比較流行的網站開發工具,你可以直接把文件拖進去就可以打開php文件了
php文件打開方式三:Notepad++工具打開
也是代碼編輯器,選擇文件打開就行
php文件打開方式四:SublimeText工具打開
和上面方法一樣,直接選擇文件打開就行
除了記事本,其它代碼編輯器工具都可以去php中文網php開發工具下載
若是想要.php文件進行運行則需要php環境。可以去php中文網QQ群374224296里去下載php環境搭建工具軟體(PHPToolClient)進行安裝,直接把文件放進根目錄下就可以用瀏覽器打開啦!
『伍』 PHP如何用調用C#編寫的DLL
1.創建一個 C# Class Library ,命名為:HelloWorld
2.打開項目的屬性,在點選左邊的 "Application"(就是第一個tab) , 然後點擊Assembly Information 按鈕 ,在彈出的Dialog中, 必須在底部勾上: Make assembly COM-visible !否則 , 這個dll將不能以COM方式訪問 .( 也可以在代碼中的類聲明中寫上[ComVisible(true)] , 效果一樣,需要增加using System.Runtime.InteropServices;引用)
『陸』 .PHP文件能不能封裝成.DLL文件呢該用什麼來封裝,如何調用
PHP使用VB封裝成DLL?沒有試過。
不過,Zend Corporation (http://www.zend.net)
開發的產品 Zend Studio 可以裝PHP進行編譯,編譯過的PHP運行速度比不編譯的要快。而且,因為編譯後生成的是二進制文件,所以,Zend Studio 也就達到了為PHP加密的功能(雖然國內已經有人開發了一種能對被Zend Studio某些版本編譯過的PHP進行反編譯,從而得到源代碼)。Zend Studio並不是免費的。
經過編譯後的PHP程序不能夠再運行,你的伺服器上必須裝有Zend 公司的另一免費產品:Zend Optimizer。使用Zend Optimizer 後,就可以在你的伺服器上正常運行編譯過的PHP程序了。
『柒』 php添加擴展dll文件
你這個dll是你自己編譯出來的還是網上下載的?請確保和你當前的php版本相符,然後放到ext目錄,打開php.ini加上一句extension=xx.dll,最後重啟Apache···然後看看你的phpinfo有沒有相應的信息