PHP 解決 Deprecated: mysql_connect(): The mysql extension is deprecated and will be removed in the future: use mysqli or PDO instead in

解決方法一:

停用PHP顯示錯誤訊息

這絕對不是個好方法,我個人是不推薦使用,雖然這方法一勞永逸,但在開發PHP時,你將會知道錯誤訊息有多麼美好,Debug時才不會像無頭蒼蠅般,除非程式已經在一個很穩定的階段,不然非必要,不要關閉全部錯誤訊息,還是留給程式可以去設定是否顯示錯誤訊息的彈性。
以下介紹幾種PHP停用錯誤訊息的方法:

在PHP文件中加入,停用PHP錯誤訊息

如果還是出現錯誤訊息,請試下列方法

在.htaccess檔案中加入下面這一行 ( Apache專用 )

如果還是出現錯誤訊息,請試下列方法

在 PHP.ini 中找到 display_errors 這一行,沒這一行則添加,將值改為off。

解決方法二:

PHP排除特定錯誤層級

如果短期間沒打算繼續升級的話,還是可以在PHP5.5 使用 mysqli_connect() ,但停用所有錯誤訊息好像又太極端,下面這方法可以設定錯誤訊息級別,隱藏某些特定的錯誤級別,選擇排除顯示某指定錯誤級別,排除的錯誤級別將不會顯示在錯誤訊息上,排除E_DEPRECATED,mysql_connect()就可以繼續撐拉。

以下例子顯示所有錯誤,除了下列這幾個錯誤級別:

E_DEPRECATED棄用E_NOTICE注意E_WARNING警告E_STRICT嚴格

解決方法

mysql_connect 改用 mysqli_connect()

這是最正規的方式拉,也是最推薦的,就是乖乖升級吧,雖然升級的過程中會有一段陣痛,有點痛,以下提供很簡單的範例。

mysqli_connect() 範例如下

mysqli_connect() 建表SQL如下

[……]

閱讀更多

PHP Deprecated: Function set_magic_quotes_runtime() is deprecated 解決方法

set_magic_quotes_runtime()於 PHP5.3後棄用

在 PHP.net 官方文件中有提到,set_magic_quotes_runtime()於PHP5.3已經棄用,雖然不會造成Fatal error而中斷程式,但會發送E_DEPRECATED的過時警告

Deprecated: Function set_magic_quotes_runtime() is deprecated

替代方案:

set_magic_quotes_runtime(0);

意思同上,以下列方法替代棄用的set_magic_quotes_runtime()

ini_set("magic_quotes_runtime", 0);
這一段主要是修改 php.ini 中 magic_quotes_runtime 參數
用以將SQL語句自動加上跳脫字元反斜線,以防止SQL注入隱碼攻擊(SQL injection)

PHP 5.4起,使用此函數會拋出Fatal error,終止程式運行

Fatal error: Uncaught Error: Call to undefined function set_magic_quotes_runtime()

相容性:

有時在寫PHP並不一定確定針對某一版本去寫,另外目標主機環境百百款,PHP版本也很不固定,每次要針對版本再改就會很麻煩,我覺得相容性就變得很重要,解決方法如下:

把舊版本程式有使用到

set_magic_quotes_runtime(0);

都改為就可以了

ini_set("magic_quotes_runtime", 0);
另外在前面加上@,加上@的意思就是強制不拋錯誤訊息,如下
@set_magic_quotes_runtime(0);
不過我覺得還是不要使用@強制不拋錯誤訊息的作法,
因為有很多時候Debug還是需要錯誤訊息,
當然還有其他方法,其他方法可參考官網文件,

參考資料:

[……]

閱讀更多

PHP 正規表達式,清除隱藏字元,整齊排列輸出的字元

清除隱藏字元,整齊排列輸出的字元,
其實這並不是一個很重要的工作啦,
但如果你看到下面輸出的XML會感到很痛苦的,
那你跟我一樣有這種偏執狂

看到這樣亂七八糟真的很痛苦,
主要是因為我們在編輯程式的時候,
有些隱藏字元會被我們加在字串中,
當輸出的時候就會一起被輸出,
比較長見的隱藏字元 n r t 就是造成這些很怪縮排的兇手,
我們可以透過正規表達式把這些字元取代,
第二個參數空白就是刪除,
echo preg_replace(‘/[nrt]/’, ‘ ‘, $xml);

不過這樣好像太乾淨了齁,
修改一下不要拿掉斷行n,

echo preg_replace(‘/[rt]/’, ‘ ‘, $xml);

哇屋~是不是舒服多了。

[……]

閱讀更多

PHP simplexml to Array XML 轉 Array

引用網址
https://gist.github.com/tfnet/2037443

PHP 使用 simplexml_load_string() 解析 XML 資料,
要一直 $node->children() 一個節點一個節點的取,這樣用實在很麻煩,
如果能一次把 XML 結構資料轉成 Array 在讀裡面的資料就非常好用了,
網路查了一下看到神人分享的function,完全用原本的XML結構打造成Array,非常好用,
該網址提供的程式碼較適用於Class中,我做了一點小小的修改,
原版本請連文章上方引用網址,修改後版本請於文章下方 Download

<?php
/**
 * Converts a simpleXML element into an array. Preserves attributes.<br/>
 * You can choose to get your elements either flattened, or stored in a custom
 * index that you define.<br/>
 * For example, for a given element
 * <code>
 * <field name=”someName” type=”someType”/>
 * </code>
 * <br>
 * if you choose to flatten attributes, you would get:
 * <code>
 * $array[‘field’][‘name’] = ‘someName’;
 * $array[‘field’][‘type’] = ‘someType’;
 * </code>
 * If you choose not to flatten, you get:
 * <code>
 * $array[‘field’][‘@attributes’][‘name’] = ‘someName’;
 * </code>
 * <br>__________________________________________________________<br>
 * Repeating fields are stored in indexed arrays. so for a markup such as:
 * <code>
 * <parent>
 *     <child>a</child>
 *     <child>b</child>
 *     <child>c</child>
 * …
 * </code>
 * you array would be:
 * <code>
 * $array[‘parent’][‘child’][0] = ‘a’;
 * $array[‘parent’][‘child’][1] = ‘b’;
 * …And so on.
 * </code>
 * @param simpleXMLElement    $xml            the XML to convert
 * @param boolean|string    $attributesKey    if you pass TRUE, all values will be
 *                                            stored under an ‘@attributes’ index.
 *                                            Note that you can also pass a string
 *                                            to change the default index.<br/>
 *                                            defaults to null.
 * @param boolean|string    $childrenKey    if you pass TRUE, all values will be
 *                                            stored under an ‘@children’ index.
 *                                            Note that you can also pass a string
 *                                            to change the default index.<br/>
 *                                            defaults to null.
 * @param boolean|string    $valueKey        if you pass TRUE, all values will be
 *                                            stored under an ‘@values’ index. Note
 *                                            that you can also pass a string to
 *                                            change the default index.<br/>
 *                                            defaults to null.
 *
 * @return array the resulting array.
 */
function simpleXMLToArray($xml,$attributesKey=NULL,$childrenKey=NULL,$valueKey=NULL)
{

if($childrenKey && !is_string($childrenKey)){
$childrenKey = ‘@children’;
}
if($attributesKey && !is_string($attributesKey)){
$attributesKey = ‘@attributes’;
}
if($valueKey && !is_string($valueKey)){
$valueKey = ‘@values’;
}

$return = array();
$name = $xml->getName();
$_value = trim((string)$xml);
if(!strlen($_value)){
$_value = null;
};

if($_value!==null){
if($valueKey){
$return[$valueKey] = $_value;
}
else{$return = $_value;
}
}

$children = array();
$first = true;
foreach($xml->children() as $elementName =&g[……]

閱讀更多

PHP POST RAW 使用 cURL

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL,            “http://yourdomain.com.tw” );

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1 );
curl_setopt($ch, CURLOPT_POST,           1 );
curl_setopt($ch, CURLOPT_HTTPHEADER,     array(‘Content-Type: text/plain’)); 
curl_setopt($ch, CURLOPT_POSTFIELDS,     “POST RAW 資料” ); 


$result=curl_exec ($ch);


引用資料

RAW POST using cURL in PHP
http://stackoverflow.com/questions/871431/raw-post-using-curl-in-php

[……]

閱讀更多

PHP big5轉utf8不要用iconv(),iconv這個函數,用mb_convert_encoding

不要以為big5轉utf8就用iconv()這麼簡單

big5有很多字是沒有收錄的:

測試:

用法:

原文出自:

http://sweslo17.blogspot.tw/2012/04/big5-erpms-sql-local-cache-phpiconv.htmlhttp://dev.sopili.net/2009/08/phpbig5utf8iconv.htmlhttp://help.i2yes.com/?q=node/65

[……]

閱讀更多

PHP 數字字串取奇數或偶數, 奇數/偶數如何判斷

奇數及偶數判斷我想應該很多方法
我這邊提供一種方法判斷
就是數值除2取餘數的方式

//偶數餘0
2/2 餘 0
4/2 餘 0
6/2 餘 0

//奇數餘1
1/2 餘 1
3/2 餘 1
5/2 餘 1

運算子

在PHP裡取餘數的運算子為 %
echo 6%2 ;  //結果 0

應用

//數字字串轉數字陣列
$str_arr = str_split(‘14063070084’);

//取奇數
foreach($str_arr as $k=>$v){
if(!($k%2))echo $v;
}

//取偶數
foreach($str_arr as $k=>$v){
if($k%2)echo $v;
}[……]

閱讀更多

php .htaccess 實用範例

關閉 magic_quotes_gpc

# Only if you use PHP
<ifmodule mod_php4.c>
php_flag magic_quotes_gpc off
</ifmodule>

減少 Bandwidth 使用量

# Only if you use PHP
<ifmodule mod_php4.c>
php_value zlib.output_compression 16386
</ifmodule>

變更 scripts 副檔名

AddType application/x-httpd-php .php4

以上語句會將 .php4 當成 PHP 程式編譯。

禁止 .htaccess 開放瀏覽

<files file-name>
order allow,deny
deny from all
</files>

變更預設頁面

DirectoryIndex myhome.htm index.htm index.php

自訂錯誤頁面

ErrorDocument 403 /forbidden.html
ErrorDocument 404 /notfound.html
ErrorDocument 500 /servererror.html

開放/禁止瀏覽目錄

# 禁止
Options All -Indexes
# 開啟
Options +Indexes

本文出自
http://www.hkcode.com/linux-bsd-notes/438

Apache Rewrite with Htaccess 理解與技巧

[……]

閱讀更多

PHP array union 陣列聯集

//array 聯集

array_unique(array_merge($array1, $array2, $array3));

//合併陣列
array_merge(); 
如果鍵名有重複,該鍵的鍵值為最後一個鍵名對應的值(後面的覆蓋前面的)。如果數組是數字索引的,則鍵名會以連續方式重新索引。
註釋:如果僅僅向array_merge() 函數輸入了一個數組,且鍵名是整數,則該函數將返回帶有整數鍵名的新數組,其鍵名以0 開始進行重新索引。

//清除重複的值
array_unique(); 
函數移除數組中的重複的值,並返回結果陣列。
當幾個數組元素的值相等時,只保留第一個元素,其他的元素被刪除。
返回的數組中鍵名不變。



參考
http://www.w3school.com.cn/php/func_array_unique.asp
http://www.w3school.com.cn/php/func_array_merge.asp

[……]

閱讀更多