close


為了一個 RTSS2008 的自動送信程式
花了我3天時間不斷的嘗試與錯誤
由於 NEWSLab 的 mail server 剛好最近不太穩定
(系所跳電,switch 掛掉)
Mail service 掉了一封確認註冊的信
所以被要求改成利用系所的 mail server 來寄信

 


首先
NEWSLab mail server 與系所 mail server 的差異在於
系所 mail server 要透過 SLL 連線
NEWSLab mail server 不用

上網找了很多利用 php 寫的程式
我用了 Mail 與 phpMailer

在用 Mail 的時候
填欄位:
    $from = "sender@example.com";
    $to = "Kuan-Ching Chuang <
forteallan@gmail.com>";
    $subject = "Hi!";
    $body = "Hi,\n\nHow are you?";


    $host = "ssl://smtp.gmail.com";
    $port = "465";
    $username = "
forteallan@gmail.com";
    $password = "********";
其中 $host 的 ssl:// 與 $username 的 @gmail.com
我不確定到底要不要加,因為有人有加有人沒加
結果是都要加的,
ssl:// 是用來指定要透過 ssl 連線
而 username 是要整個 email 位址的

我覺得有個缺點,因為密碼是明碼,所以要小心 php code 外洩

接下來是這次問題最嚴重的地方
當我寫了一個簡單的測試程式後
執行下去都給我一個錯誤訊息:
Unable to find the socket transport "ssl" - did you forget to enable it when you configured PHP?
又開始 google 之旅了
終於找到了以下的解法:

with php5 is as easy as loading the openssl extension in your code with dl() or uncomment "extension=php_openssl.dll" in php.ini

but with php4 this does not actually work under windows . you need to get a patched php4ts.dll from http://ftp.emini.dk/pub/php/win32/openssl/ and replace yours with

我明明已經在 php.ini 裡 uncomment "extension=php_openssl.dll" 了
卻依舊不行,感覺是沒有讀到 php.ini 的設定
此時,又在 windows xp 裡找到兩個地方有 php.ini 檔:
C:\WINDOWS and C:\AppServ\php5
且利用 phpinfo(); 寫在程式裡開啟該 php時
Configuration File (php.ini) Path 欄位固定都會顯示C:\WINDOWS
而 Loaded Configuration File 欄位則會顯示我在 httpd.conf 裡設定的 PHPIniDir "C:/AppServ/php5"
這時又混淆了,它倒底是 Load 哪個 php.ini 啊
嘗試錯誤又開始了,最後發現它是會 Load 在 httpd.conf 裡設定的 PHPIniDir "C:/AppServ/php5"
Configuration File (php.ini) Path 僅供參考。

在發現我改 php.ini 的其他參數有效,偏偏就 extension=php_openssl.dll 沒生效時
我決定開始在我的 local 端電腦,安裝一整套 Web server 需要用到的程式來測試:
Apache2.2 PHP5 Mysql phpMyAdmin OpenSSL
這是一個錯誤的決定
以上的動作,花了2天的時間
在此先不介紹
在玩了一堆架站的程式時,發現 dll 檔很重要
(在 php 檔裡使用以下程式,可以列出有 Load 到的 transport layer 的 protocol)

(
$xportlist = stream_get_transports();
print_r($xportlist);
)

(我用了之後,只有 tcp and udp 兩個 protocol)

所以我下了幾個關鍵字去 google:php_openssl.dll not loaded
就是他們,讓我從深陷的泥沼裡爬了出來
我找到了以下的網頁:

http://coding.derkeiler.com/Archive/PHP/comp.lang.php/2008-03/msg00819.html
裡面的一句話:

When I copied libeay32.dll and ssleay32.dll from the Php folder to apache/bin, overwriting the ones already there (I have Apache with OpenSSL, and that must be why the other older ones were there), it finally started working!!
我這裡也他馬的 finally working 了!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
但是只有我一個人爽,喜悅只有數秒鐘而已
OS. 幹麻突然感傷啊....唉~~~~~~~

接下來講講因為那個錯誤的決定
而跑出去繞了一大圈的啟發與問題的解決之道
以利之後不幸又要裝這種東西的參考
不要再花太多時間 google 了


此網頁說了如何產生 certificate
要先安裝 Visual C++ 2008 Redistributables 然後是 OpenSSL
再跟著網頁的指示即可
其中要注意的是 openssl.cnf 的設定
目錄分層要用兩個 \\ (e.g. new_certs_dir = $dir\\cert)
使用中如果發現有錯誤,多半是沒有該目錄
注意看錯誤訊息,再自己手動建目錄即可


此網頁說明了 phpMyAdmin 如果無法讀取 mysql 模組時的解法
Q1:

我是用apache2+PHP5+MySQL server5
可是我不知道問題是在哪
有的人說等PHP5穩定在用.可是我必須用PHP5
使用phpmyadmin也會在網頁上提示:無法載入mysql模組
能告訴我是怎麼解決的嗎?
一般方法我有試過了
像是php.ini裡頭extension的php_gd2.dll , php_mysql.dll的啟用


下面是一開機就出現的警示
PHP Warning: PHP Startup: Unable to load dynamic
library './php_mysql.dll' - 找不到指定的模組。


Ans1:
mysql函式庫沒有裝哦.
你可能要先裝一下mysql函式庫,.

extension_dir = "是不是你的路dll存放路徑"
php_mysql.dll

3.再把 PHP5 目錄中的 libmysql.dll 複製到 \windows\system32 裡面,再重新啟動 Web Server 就可以了。

第一次自己裝windows版,覺得有很多系統函式要先裝dll才會生效啦.



Q2:
phpMyAdmin 嘗試連線到 MySQL 伺服器, 但伺服器拒絕了連線. 您應於 config.inc.php 內檢查主機名稱, 登入名稱及密碼及確保這些資料是與系統管理人員所提供的 MySQL 伺服器資料相同

錯誤
MySQL 傳回:

#1045 - Access denied for user 'root'@'localhost' (using password: NO)


Ans2:
mysql.4.1.5 以上版本 使用 41 位元的加密密碼
php mysql 函式庫使用舊的 client 方式連 mysql 會發生錯誤

mysql 提供 old_password 函式可以將密碼改回 16位元加密
用mysql 文字模式 mysql -uroot -p密碼 連線進去後

set password for 帳號@localhost = old_password('密碼');
這樣 php 即可連線到新版的 mysql


以上
是我這四天在忙的東西
!#$@%#$^#$^!$#%!#$^#$!^

 

 

 

arrow
arrow
    全站熱搜

    forteallan 發表在 痞客邦 留言(1) 人氣()