c調用php
① 在php中如何調用C/C++寫的程序
可以將c編譯成可執行文件,然後通過exec函數調用它
② php語言可執行c語言么
不能啊,PHP 跟C有各自運行的伺服器,雖然說PHP是建立在C的基礎上的,但是兩者不可能相通的,不過可能會有高手知道,
③ 如何使用C ++代碼與PHP進行交互
您可以將函數/類添加到PHP,在C ,如果我記得正確從一篇文章我讀一段時間之前),這可能允許你做一些事情更快 - 如果編程良好:無需解釋PHP代碼;只有執行機器代碼,這通常更快。
要做到這一點,你必須開發一個 PHP擴展。
互聯網上沒有這么多資源,但這些可能會幫助你開始:
擴展寫作第一部分:PHP和Zend簡介
擴展寫入第二部分:參數,數組和ZVAL
擴展寫入第II部分:參數,數組和ZVAL
擴展編寫第三部分:資源
具體來說,關於C ++部分,這也可能有幫助:
在PHP擴展中包裝C ++類
④ c++怎麼調用PHP的函數
C++不可以調用php的函數,
反過來則可以:將c++程序編寫成dll,掛到php下面讓php調用。
C++屬於編譯語言。編譯成機器碼了。而php是動態語言。不能編譯為機器碼。
不能編譯為機器碼的語言,咋能寫在機器碼語言中呢?不能編譯為機器碼的語言,是通過虛擬機運行的。
如果你要想調用的話,不妨研究一下php 的那些 dll 文件,難度有點大,我是力不能及。
⑤ php怎樣和c語言混合編程
php是一個腳本語言,如果需要系統調用,需要用C語言編寫一個擴展來實現,另外C是靜態編譯的,執行效率比PHP代碼高很多。同樣的運算代碼,使用C來開發,性能會比PHP要提升數百倍。編寫好的php擴展要在編譯php源碼時加進去。
⑥ C++的標准動態庫為什麼不能被PHP調用
php調用C/C++動態鏈接庫
一、簡介
一般而言,php速度已經比較快,但是,對於一些較高級開發者而言,如果想要追求更快的速度,那毫無疑問可以通過自己寫c代碼,並編譯為動態鏈接庫(常為.so文件),然後php通過創建一個新的擴展(extension),並在擴展里調用該.so文件,同時對外暴露出php函數介面。
在實際使用中,只要調用該函數介面,即可使用底層更快速的c函數服務。
二、起因
之所以本人要研究這么個問題,主要是近來項目中需要調用一個自己開發的圖像處理的動態鏈接庫,希望伺服器能夠對客戶端提供該圖像處理服務。而我們伺服器開發語言選擇了php,所以著手此問題。
三、實現方法
廢話不多說,為了實現php調用c庫,我在網上搜了個遍也沒找到幾篇好文章,只有兩篇還不錯的,分享在本文最末,有興趣的讀者可以去閱讀。
下面,本文的開發環境背景是CentOS release 6.5 。為了能夠調用c庫,我們的php 5.6.9,apache 2.4均是下載源碼並編譯的,不可直接通過yum安裝!請注意。至於php和apache的源碼編譯本文不提,只要注意在configure打開合適開關即可。
具體步驟如下:
將共享庫.so添加入系統配置中(假設共享庫名為 'libhello.so')
cp libhello.so /usr/local/lib
echo /usr/local/lib > /etc/ld.so.conf.d/local.conf
/sbin/ldconfig
在php/ext目錄下創建擴展頭文件,取名為myfunctions.def
在該文件里填寫c函數聲明即可。每個函數一行。
string hello(int a)
int hello_add(int a, int b)
使用ext_skel搭建擴展骨架
./ext_skel --extname=myfunctions --proto=myfunctions.def
打開config.m4 中的enable開關
PHP_ARG_ENABLE(myfunctions, whether to enable myfunctions support,
[ --enable-myfunctions Include myfunctions support])
上面把擴展骨架建立好了,下面重新配置php (下面是我個人配置文件,讀者需要結合自己情況修改)
./buildconf --force //生成新配置腳本
'./configure' '--prefix=/usr/local/php' '--with-libdir=lib64' '--enable-fpm' '--with-fpm-user=php-fpm' '--with-fpm-group=www--enable-mysqlnd' '--with-mysql=mysqlnd' '--with-mysqli=mysqlnd' '--with-pdo-mysql=mysqlnd' '--enable-opcache' '--enable-pcntl' '--enable-mbstring' '--enable-soap' '--enable-zip' '--enable-calendar' '--enable-bcmath' '--enable-exif' '--enable-ftp' '--enable-intl' '--with-openssl' '--with-zlib' '--with-curl' '--with-gd' '--with-zlib-dir=/usr/lib' '--with-png-dir=/usr/lib' '--with-jpeg-dir=/usr/lib' '--with-gettext' '--with-mhash' '--with-ldap' '--disable-fileinfo' '--with-config-file-path=/usr/local/php/etc' '--with-apxs2=/usr/local/httpd/bin/apxs' '--enable-myfunctions' // 配置
記住!一定在末尾加上 —enable-myfunctions 。這樣子才會被編譯進php中。
當擴展編譯進去了之後,就可以開始修改擴展里的myfunctions.c文件,在裡面可以添加php->c的轉接函數,在轉接函數里可以調用.so內的函數。
比如要添加一個hello_add的php函數,裡面可以調用c函數add(int a, int b)
a. 添加函數聲明
PHP_FE(hello_add, NULL)
b. 添加php函數
PHP_FUNCTION(hello_add){ ... }
注意,在該函數里,如果調用了.so文件里的介面函數,那麼待會在make的時候,要指定所使用的.so共享庫,該共享庫必須完成第1步中添加到系統配置的操作。
如果調用了.so文件,那麼要在php/Makefile中添加
Extra_LDFLAG = -lhello //對應前面的libhello.so
Extra_libs = -lhello
(make clean)
每次修改完上面的c文件,都要重新make
make
make install
重啟apache伺服器
httpd -k restart
在phpinfo里可以看到新擴展,可以直接在php調用新擴展內的函數。
⑦ 自己用C開發PHP模塊有什麼優勢
PHP 和 C++不沾邊 , 是 C 寫的 . 就目前而言 , 所有版本都是的 .
不是內置函數是 C 實現的 , 整個 PHP 從 sapi->詞法分析(re2c , zend_language_scanner.l)->語法分析(bison, zend_language_parser.y)->zendVM , 都是 C 實現的 .
擴展實現 function add($x, $y)(return $x+y;} 這個屬於大炮打小鳥 , 你可以用 phpsrc/ext/ext_skel 自己建一個擴展骨架看看就明白了 .
PHP 想調用 C 中的東西很簡單 , 假如現在有個動態鏈接庫 , liba.so , 其中有一個 int a() ;並且提供一個 a.h 包含函數 a 的定義 , 那就簡單了 , 使用 c 編譯選項如下
gcc -I[a.h所在路徑] -L[liba.so所在路徑] -la xx.c test
xx.c 中調用 a() 就不列了 , 僅列編譯選項 . 因為 PHP 擴展要調動態鏈接庫中的函數,重要的是環境配置。
使用 ext_skel 生成的擴展框架中會有一個 config.m4 , 在那個裡面可以做一些 gcc 選項 , 你可以自己研究研究
⑧ 如何在cmd命令行下運行php
在CMD下運行PHP文件有兩種方法:
方法一、直接調用PHP.EXE來運行,例如你需要運行A.PHP,而PHP安裝在C:\PHP下面,那麼可以用下面的命令運行它:
C:\>C:\PHP\PHP.EXE
A.PHP
方法二、利用文件關聯,直接把A.PHP作為A.BAT等文件一樣運行,例如下面的命令:
C:\>A.PHP
⑨ thinkphp5.0怎麼調用c
ThinkPHP函數詳解:C方法
C方法是ThinkPHP用於設置、獲取,以及保存配置參數的方法,使用頻率較高。
了解C方法需要首先了解下ThinkPHP的配置,因為C方法的所有操作都是圍繞配置相關的。
ThinkPHP的配置文件採用PHP數組格式定義。
由於採用了函數重載設計,所以用法較多,我們來一一說明下。
設置參數
C('DB_NAME','thinkphp');
表示設置DB_NAME配置參數的值為thinkphp,由於配置參數不區分大小寫,所以下面的寫法也是一樣:
C('db_name','thinkphp');
但是建議保持統一大寫的配置定義規范。
項目的所有參數在未生效之前都可以通過該方法動態改變配置,最後設置的值會覆蓋前面設置或者慣例配置裡面的定義,也可以使用參數配置方法添加新的配置。
支持二級配置參數的設置,例如:
C('USER.USER_ID',8);
配置參數不建議超過二級。
如果要設置多個參數,可以使用批量設置,例如:
$config['user_id'] = 1;
$config['user_type'] = 1;
C($config);
如果C方法的第一個參數傳入數組,就表示批量賦值,上面的賦值相當於:
C('USER_ID',1);
C('USER_TYPE',1);
獲取參數
要獲取設置的參數,可以用:
$userId = C('USER_ID');
$userType = C('USER_TYPE');
如果USER_ID參數尚未定義過,則返回NULL。
也可以支持獲取二級配置參數,例如:
$userId = C('USER.USER_ID');
如果傳入的配置參數為空,表示獲取全部的參數:
$config = C();
保存設置
3.1版本增加了一個永久保存設置參數的功能,僅針對批量賦值的情況,例如:
$config['user_id'] = 1;
$config['user_type'] = 1;
C($config,'name');
在批量設置了config參數後,會連同當前所有的配置參數保存到緩存文件(或者其他配置的緩存方式)。
保存之後,如果要取回保存的參數,可以用
$config = C('','name');
其中name就是前面保存參數時用的緩存的標識,必須一致才能正確取回保存的參數。取回的參數會和當前的配置參數合並,無需手動合並。
⑩ C裡面的輸出指針PHP怎麼調用 - 技術問答
VC里沒有字元串?退一萬步說,讓他把指針給你做成數組這總行吧