導航:首頁 > 編程語言 > php無法載入動態庫

php無法載入動態庫

發布時間:2023-08-19 12:28:30

A. 無法載入動態庫php_ldap.dll

載php_ldap.dll,用的是php-5.3.3-Win32-VC6-x86,所以要找對應的ldap版本,大約是149KB.

然後查看php手冊的LXXV. LDAP Functions介紹,看到還有兩個依賴庫libeay32.dll and ssleay32.dll需要放到環境變數path里,由於這兩個文件在php目錄下,而且安裝php時path已包含該路徑,所以不需要設置,反之,就要放到windows能找到的目錄了,比如win2000,就要復制到system32文件夾下。

然後,重啟apache.

用phpinfo()查看載入成功。

擴展庫是php擴展的功能,比如php本來不支持操作某種功能 ,但在新版本想對它提供支持,就以擴展的方式來提供,這樣,我們在配置php時,如果我們不用此功能,我們就可以讓php不載入他.從而節省伺服器資源.提供其性能

php的擴展庫一般放在php目錄下的ext目錄里.你在網上下載的php壓縮解壓後應該可以看到.

php.ini中的 extension_dir 用來指定你的擴展名的地址 。

php.ini中有一排像 ;extension="xxxxxx.dll" 的內容就是用來配置讓你的php運行環境支持什麼不支持什麼。

以下為php.ini中的剪切段

;extension=php_bz2.dll

;extension=php_curl.dll

;extension=php_dba.dll

在PHP配置出現不能載入模塊之類的錯誤

載入LDAP模塊的問題

在Windows XP環境下配置php和ldap容易出現 php中載入php_ldap.dll的問題

解決辦法:

需要在C:WINNTSYSTEM32, or C:WINDOWSSYSTEM拷貝PHP安裝目錄中的libeay32.dll和ssleay32.dll 即可

產生原因:

這是php本身帶有的一個bug

B. 如何修復PHP的警告:PHP啟動:無法載入動態庫'分機\\\ php

擴展庫是php擴展的功能,比如php本來不支持操作某種功能
,但在新版本想對它提供支持,就以擴展的方式來提供,這樣,我們在配置php時,如果我們不用此功能,我們就可以讓php不載入他.從而節省伺服器資源.提供其性能
php的擴展庫一般放在php目錄下的ext目錄里.你在網上下載的php壓縮包解壓後應該可以看到.
php.ini中的
extension_dir
用來指定你的擴展名的地址

php.ini中有一排像
;extension="xxxxxx.dll"
的內容就是用來配置讓你的php運行環境支持什麼不支持什麼。
以下為php.ini中的剪切段
------------------------------
;extension=php_bz2.dll
;extension=php_curl.dll
;extension=php_dba.dll

C. PHP可否調用動態鏈接庫

當php.ini中的enable_dl選項為on時,可以使用下面這個函數來載入dll文件:
int dl ( string library ),但是當系統處於安全模式時,即使enable_dl為on,也無法使用.

<?php
// Example loading an extension based on OS
if (!extension_loaded('sqlite')) {
if (strtoupper(substr(PHP_OS, 0, 3) == 'WIN')) {
dl('php_sqlite.dll');
} else {
dl('sqlite.so');
}
}

// Or, the PHP_SHLIB_SUFFIX constant is available as of PHP 4.3.0
if (!extension_loaded('sqlite')) {
$prefix = (PHP_SHLIB_SUFFIX == 'dll') ? 'php_' : '';
dl($prefix . 'sqlite.' . PHP_SHLIB_SUFFIX);
}
?>

這屬於動態載入dll文件,還有一種方法就是,將你的dll文件放到php的ext目錄下,然後在你的php.ini文件裡面找到一大堆:extension=php_xxxx.dll那裡,找個空行,按照這個寫法寫上去,注意前面不要有";"號.重啟apache後,就可以調用裡面的東西了.

D. php中gd庫已打開,還是不能載入

只要去除php.ini配置文件中gd庫文件前面的分號就可以了啊,要重啟apache。

E. 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調用新擴展內的函數。

閱讀全文

與php無法載入動態庫相關的資料

熱點內容
acmc用什麼編譯器 瀏覽:230
golangweb編譯部署 瀏覽:923
怎樣踩東西解壓 瀏覽:969
單片機核心板外接鍵盤 瀏覽:396
怎樣打開自己的微信文件夾 瀏覽:424
單片機紅外測距原理 瀏覽:268
phpxdebug擴展 瀏覽:757
建築樓層凈高演算法 瀏覽:1000
怎麼關閉智聯app求職狀態 瀏覽:418
pdf的文件夾怎麼列印 瀏覽:752
延拓演算法初值 瀏覽:786
首次適應演算法都不滿足的話怎麼辦 瀏覽:19
php56加密 瀏覽:556
金立手機app怎麼設置浮窗 瀏覽:496
程序員沒有社會地位 瀏覽:963
榮耀app怎麼解鎖 瀏覽:594
php程序員學歷 瀏覽:636
c語言編譯可以嗎 瀏覽:201
脂硯齋重評石頭記pdf 瀏覽:756
三星冰箱壓縮機哪裡產 瀏覽:429