目前分類:PHP (50)

瀏覽方式: 標題列表 簡短摘要


程式:

<?php
$my_val = 1;
function my_func() { /* do something... */ }
define('MY_CONSTANTS', 1);

/**
 * 列出目前所有已定義的 function
 * 使用: get_defined_functions()
 */
echo "<pre>目前所有已定義的 function : " . print_r(get_defined_functions(), TRUE). "</pre>";

/**
 * 只列出自己定義的 function
 * 使用: get_defined_functions()['user']
 */
echo "<pre>自己定義的 function : " . print_r(get_defined_functions()['user'], TRUE). "</pre>";

/**
 * 列出目前所有已定義的常數
 * 使用: get_defined_constants(TRUE)
 */
echo "<pre>目前所有已定義的常數 : " . print_r(get_defined_constants(TRUE), TRUE). "</pre>";

/**
 * 只列出自己定義的常數
 * 使用: get_defined_constants(TRUE)['user']
 */
echo "<pre>User's get_defined_constants() = " . print_r(get_defined_constants(TRUE)['user'], TRUE). "</pre>";

/**
 * 列出目前已定義的變數
 * 使用: get_defined_vars()
 */
echo "<pre>get_defined_vars() = " . print_r(get_defined_vars(), TRUE). "</pre>";
?>

 

wbkuo 發表在 痞客邦 留言(0) 人氣()

今天在翻某個第三方套件的 Source Code 的時候發現這個常數,可以用來判斷目前執行的作業系統。
在 Windows 7 及 CentOS 測試分別得到 'WINNT' 及 'Linux'

稍微 Google 了一下發現它可能會有以下的值:

  1. CYGWIN_NT-5.1
  2. Darwin
  3. FreeBSD
  4. HP-UX
  5. IRIX64
  6. Linux
  7. NetBSD
  8. OpenBSD
  9. SunOS
  10. Unix
  11. WIN32
  12. WINNT
  13. Windows
  14. CYGWIN_NT-5.1
  15. IRIX64
  16. SunOS
  17. HP-UX
  18. OpenBSD (not in Wikipedia)


wbkuo 發表在 痞客邦 留言(0) 人氣()

最近碰到一個 BUG ,會造成 json_encode 回傳空白,所以 api 的回傳值就會錯誤
找了好久才發現是在組資料的時候,不小心組出了一個遞迴物件(Object *RECURSION*)

所謂的遞迴物件就是,該物件有某個屬性是指向物件本身,就會造成在走訪的時候不斷的重覆指向
以前我從來沒有碰過這種資料,理論上正確的資料不會也不應該出現這種東西,總之就是要小心處理

wbkuo 發表在 痞客邦 留言(0) 人氣()

因為我個人是 print_r 的愛用者,但有一個問題一直很困擾我,就是布林值無法正常顯示的問題。
我後來花了一點時間寫了一個 function 叫 print_r_fix 來解決這個問題,有需要的朋友請自行取用。

程式碼

<?php
/**
* 修正 print_r 無法正常顯示布林值的問題
* 直接把布林值取代成字串
* @author Leo.Kuo
*/
function print_r_fix($value)
{
    function print_r_boolean_fix($value)
    {
        if (is_array($value))
        {
            foreach ($value as $key => $v)
            {
                $value[$key] = print_r_boolean_fix($v);
            }
        }
        else if (gettype($value) == "boolean")
        {
            $boolean_str = ($value) ? "True" : "False";
            $value = "{$boolean_str} (Boolean)";
        }

        return $value;
    }
    print_r(print_r_boolean_fix($value));
}

/************************** demo ******************************/
$arr = array
(
    'a' => 1,
    'b' => FALSE,
    'c' => array
    (
        'e' => TRUE,
        'f' => 'Hello World!',
        'g' => array
        (
            'h' => FALSE,
            'i' => 1.234
        )
    )
);

echo "<pre>";
print_r_fix($arr);
echo "</pre>";
?>

 執行結果

wbkuo 發表在 痞客邦 留言(0) 人氣()

$a = [1, 2, 3, 4];

$a = ['one' => 1, 'two' => 2, 'three' => 3, 'four' => 4];


wbkuo 發表在 痞客邦 留言(0) 人氣()

 

<?php
$url = "http://abc.com.tw/?mod=store&func=style_show&SR_NO=AIAE81";
$urls = parse_url($url);
parse_str($urls['query'], $queries);

/* 結果:
    parse_url = Array
    (
        [scheme] => http
        [host] => abc.com.tw
        [path] => /
        [query] => mod=store&func=style_show&SR_NO=AIAE81
    )
*/
echo "<pre>parse_url = " . print_r($urls, TRUE). "</pre>";

/* 結果:
    parse_str = Array
    (
        [mod] => store
        [func] => style_show
        [SR_NO] => AIAE81
    )
*/
echo "<pre>parse_str = " . print_r($queries, TRUE). "</pre>";
?>

 


wbkuo 發表在 痞客邦 留言(0) 人氣()

<?php
$a = array(1,2,3,4,5);

// 移除第2和第4個陣列元素
unset($a[2]);
unset($a[4]);
echo "<pre>" . print_r($a, TRUE). "</pre>";
/*
    結果:
    Array
    (
        [0] => 1
        [1] => 2
        [3] => 4
    )
*/

// 重整陣列
$a = array_values($a);
echo "<pre>" . print_r($a, TRUE). "</pre>";
/*
    結果:
    Array
    (
        [0] => 1
        [1] => 2
        [2] => 4
    )
*/

文章標籤

wbkuo 發表在 痞客邦 留言(0) 人氣()

說明
重點在於每個串接的 function 都必須把物件的實體傳回來(return $this),這樣就能不斷的重覆呼叫,就像 jQuery 的寫法一樣
不囉嗦,直接看 code 吧!

<?php
class Number
{
    private $value = 0;

    // 初始化
    function __construct($n)
    {
        $this->value = $n;
    }
    
    // 加
    public function add($n)
    {
        $this->value += $n;
        return $this;
    }

    // 減
    public function subtract($n)
    {
        $this->value -= $n;
        return $this;
    }

    // 乘
    public function times($n)
    {
        $this->value *= $n;
        return $this;
    }

    // 除
    public function divided($n)
    {
        $this->value /= $n;
        return $this;
    }

    public function get()
    {
        return $this->value;
    }
}

// Class 串接寫法測試
// 目前測試在 PHP 5.2.17 及 5.4.16 皆能正常執行
$a = New Number(3);
echo "3 - 1 + 2 = " . $a->subtract(1)->add(2)->get();

// 輸出的結果為 3 - 1 + 2 = 2

文章標籤

wbkuo 發表在 痞客邦 留言(0) 人氣()

1. 資料庫設定
    檔案:application/config/database.php

2. 自動載入
    檔案:application/config/autoload.php

wbkuo 發表在 痞客邦 留言(0) 人氣()

1. 到 application/controllers 複製 welcome.php 到 hello_world.php

2. 編輯 hello_world.php
    2.1 修改 class name
          class welcome => class hello_world

wbkuo 發表在 痞客邦 留言(0) 人氣()

使用函式
memory_get_usage()

範例

<?php 
echo memory_use_now() . "<br>";

$a = 1;
echo memory_use_now() . "<br>";

$b = array();
for($i=0; $i<400000; $i++) $b[] = 1;
echo memory_use_now() . "<br>";

$c = array();
for($i=0; $i<400000; $i++) $c[] = "a";
echo memory_use_now() . "<br>";

function memory_use_now()
{
    $level = array('Bytes', 'KB', 'MB', 'GB');
    $n = memory_get_usage();
    for ($i=0, $max=count($level); $i<$max; $i++)
    {
        if ($n < 1024) 
        {
            $n = round($n, 2);
            return "{$n} {$level[$i]}";
        }
        $n /= 1024;
    }
}
?>

wbkuo 發表在 痞客邦 留言(0) 人氣()

狀況
今天在找一個系統的問題的時候,發現最後顯示的錯誤訊息並沒有定義在程式裡
找到最後才發現是因為 curl 把讀到的資料直接輸出在畫面了,請直接看 code 吧!
找個時間要來研究一下 curl 了

wbkuo 發表在 痞客邦 留言(0) 人氣()

錯誤訊息
PHP Warning: preg_replace() [function.preg-replace]: Unknown modifier 'd' in D:\TMS\www_test\preg_replace.php on line 8

解決方法
這是因為 preg_replace 必須用那個斜線(/)把正規表示法包起來,最後面可以加上 i, m 等旗標(詳細請看官網)

wbkuo 發表在 痞客邦 留言(0) 人氣()

問題
今天接到客戶回報,說寄信的時候會看到這個錯誤訊息
上網搜尋了一下,發現大意是說 domain name 找不到

解決方法

wbkuo 發表在 痞客邦 留言(0) 人氣()

經查詢 preg 系統並沒有一次比對多個 pattern 的做法
可能是 preg_match 或 preg_match_all 的 pattern 可以用 or 來寫的關係
只有 preg_replace(mixed $pattern , mixed $replacement , mixed $subject) 可以使用陣列


wbkuo 發表在 痞客邦 留言(0) 人氣()

在 <head> 加上 <meta http-equiv='X-UA-Compatible' content='IE=9; requiresActiveX=true' >
** 先強制使用 IE 相容性 **


wbkuo 發表在 痞客邦 留言(0) 人氣()

程式

<?
$str = "This is the [*worst*] day [*of*] my life.";
preg_match_all("[*([^*]+)*]", $str, $out, PREG_PATTERN_ORDER);

echo "str = '$str' <br>"; 
echo "<pre>" . print_r($out, true) . "</pre>";
?>



錯誤訊息

wbkuo 發表在 痞客邦 留言(0) 人氣()

今天聽同事提到的,還沒測試,不過先記錄下來
要設定 httpd.conf 的 ThreadStackSize 值調大


wbkuo 發表在 痞客邦 留言(0) 人氣()

呼叫 ajax

<script src='/sys/lib/js/jquery.js'></script>
<script>
        /* 一般陣列 */
        var arr1 = [];
            arr1[0] = 1;
            arr1[1] = 3;
            arr1[3] = 8;
        
        /* 有 key 的陣列 */
        var arr2 = {no0:'哈,哈',no3:'1,23'};
        
        /* 二維陣列 */
        var arr3 = [ {id:1,type:3}, {id:3,type:2}, {id:1001,type:3} ];

        $j.ajax({
                 url: 'http_ajax.php',
                 cache: false,
                 dataType: 'html',
                 type:'POST',                
                 data: {arr1:arr1, arr2:arr2, arr3:arr3},
                 error:function(){alert('Ajax request 發生錯誤');},
                 success: function(res){alert('Ajax success!');}
               });
</script>


接收的php: http_ajax.php

<?
    print_r($_POST);
?>



wbkuo 發表在 痞客邦 留言(0) 人氣()



如果 function __autoload 有定義, 則在 new 一個 class 的時候,會自動把 class_name 帶入 __autoload 函式中

<?php

wbkuo 發表在 痞客邦 留言(0) 人氣()

«12 3