跳到主要內容

發表文章

目前顯示的是有「PHP」標籤的文章

EDM發信統計方案

發送EDM時,我們總會想知道到底有多少人開啟信件,這封信件內容被閱讀了幾次? 如果能在信件內容中藏一個連結,每當開啟信箱即可自動提出要求告訴後端站台我正在閱覧此封EDM。 如何達到『自動提出要求告訴後端站台我正在閱覧此封EDM』? 這個連結需包含了EDM id 及Email地址,這個連結可能會長成這樣子: https://www.xxxx.com/countedm.php?edmid= EDM編號 &email= 開信email地址 自動提出要求這件事可以透過產生圖片來達成。 只要在EDM內容尾端加入 <img src="https://www.xxxx.com/countedm.php?edmid=EDM編號&email=開信email地址" /> 即可。 countedm.php程式內容只要產出一張很小很小的圖片就好。而後面的傳遞參數就用來紀錄統計開信數量的資訊。 PHP產生圖片方式。 1. php需支援GD 2.1以上的函式庫。 2. countedm.php輸出內容為     header("Pragma: no-cache");     header("content-type:image/png");     header('Cache-control: no-cache, no-store');     $im = imagecreate(1, 1); // 單純輸出 1PX 的圖     $bg_color = imagecolorallocate($im, 255, 255, 255); // 圖片配色為白色     imagefill($im, 0, 0, $bg_color);     imagepng($im);  // 輸出圖片     imagedestroy($im);  // 銷毀圖片,別讓圖片佔去server內的資源。 紀錄開信表格(edmopencount)     edmid  EDM編號(pk...

CentOS 7 + PHP 7 無法上傳檔案

下以動作請使用root權限控制,確保指令可以正確運作。 查看 vi /etc/php.ini ;;;;;;;;;;;;;;;;;;;;;; ; File Uploads ; ;;;;;;;;;;;;;;;;;;;;;; ; Whether to allow HTTP file uploads. ; http://php.net/file-uploads file_uploads = On ; Temporary directory for HTTP uploaded files (will use system default if not ; specified). ; http://php.net/upload-tmp-dir ; upload_tmp_dir = ; Maximum allowed size for uploaded files. ; http://php.net/upload-max-filesize upload_max_filesize = 2M 此設定說明,上傳檔案時,會先將檔案存放在預設/tmp 資料夾。 查看 /tmp 的權限應該為 drwxrwxrwt. 10 root root tmp 再往下檢查 /tmp下的檔案權限 ls /tmp -all drwx------. 3 root root systemd-private-xxxxx-httpd.service-xxxxxx 將其擁有者修改為apache chown -R apache /tmp/systemd-private-xxxxx-httpd.service-xxxxxx 再將其權限設定為755 chmod -R 755 /tmp/systemd-private-xxxxx-httpd.service-xxxxxx -------------------------------------------------------------------------------- 再來我們也需檢查PHP程式指定上傳的路徑 假設上傳路徑為 /var/www/html/upload ls /var/www/html/upload drwxr-xr-x. 2 myname web upload 將其擁有者修改...

CentOS 7 + PHP 7 使用AD驗證

login.php 內容   $domain = "example.com.tw";   // 網域名稱   $ldap_server = "example01";     // AD SERVER 名稱   $connect_ad = ldap_connect ($ldap_server) or die ("無法連線AD SERVER");   ldap_set_option ($connect_ad, LDAP_OPT_PROTOCOL_VERSION, 3);   ldap_set_option ($ds, LDAP_OPT_REFERRALS, 0);   $ldapbind = @ ldap_bind ($connect_ad, "user01@".$domain, "userPassword");   if ($ldapbind) {     echo "驗證成功,已登入";   } else {     echo "驗證失敗。";   } ?> 於WEB SERVER執行時,永遠為顯示"驗證失敗"; 但是,以指令執行 [user01@example.com.tw html]$php login.php 其結果為"驗證成功,已登入"。 在 stackOverflow網站上有一篇回答 SELinux doesn't allow your httpd daemon to talk to the LDAP server on the same machine. 所以,我們要變更一下系統設定。 檢查httpd使用配置 getsebool -a | grep httpd httpd_anon_write --> off httpd_builtin_scripting --> on httpd_can_check_spam --> off httpd_can_connect_ftp --> off httpd_can_connect_ldap --> off httpd_can...

phh get中文亂碼

撰寫網頁時,常會使用GET來傳遞訊息參數。 遇到傳遞中文時,常會出現亂碼,導至網頁出現錯誤。 PHP語言可以使用 urldecode() 函數來解決。 setget.html 傳遞中文參數 search.php $getstr = $_REQUEST['data']; echo urldecode($getstr);

PHP 星期幾程式說明

老闆除了要看日期,還要看那一天是星期幾。 身為員工,就是要讓看報表的人方便。 所以就加個區塊放星期N吧。 建立一個星期陣列:$week = array("星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"); 取得指定日期:$today = date("Y-m-d", time()); echo $week[date("w", strtotime($today)];

PHP 陣列函數說明

1. 陣列排序:     sort($array) ─ 排序數值陣列值,數字由小排到大;英文字由大寫排到小寫。     asort($array) ─ 排序陣列值,數字由小排到大。     ksort($array) ─ 排序陣列的Key,由小排到大。     arsort($array) ─ 排序陣列的值,由大排到小。     krsory($array) ─ 排序陣列的Key,由大排到小。 2. 判斷陣列是否存在指定的值:     in_array('指定值', $array) 回傳Ture或False 3. 判斷陣列是否存在指定的Key:     array_key_exists('指定Key', $array) 回傳Ture或False 4. 搜尋陣列中指定的值,並回傳第一次出現的Key。     array_search('指定值', $array) 5. 將陣列轉成字串。     implode('分隔符號', $array) 6. 將字串轉為陣列。     explode('分隔符號', '字串1 分隔符號 字串2 分隔符號 字串3')

推算日期使用strtotime超好用

要推算日期首推strtotime函數。  echo  date('Ymd', strtotime("+1 day")); strtotime未加注日期,表示當天。上式所得到的結果為 20121205     ※本文發佈日期為2012-12-04  echo  date('Ymd', strtotime("-1 day")); >> 20121203  echo  date('Ymd', strtotime("+1 month")); >> 20130104  echo  date('Ymd', strtotime("+1 week")); >> 20121211  echo  date('Ymd', strtotime("thursday -1 week")); >> 20121129   ※當日之前的第一個星期四(不含當日)  echo  date('Ymd', strtotime("thursday 0 week")); >> 20121206   ※當日之後的第一個星期四(含當日)  echo date('Ymd', strtotime("tuesday 0 week"); >> 20121204   ※ 當日之後的第一個星期二(含當日)

計算日期差

由於資料庫習慣將日期存成文字格式。 所以取得的日期均為"YYYYMMDD"; 如果要計算兩個日期差幾年、差幾月、差幾日... 則需要轉換格式並相減。 自訂函數: DateDiff ($stdate, $endate, $type) {     // $stdate-起始日期, $endate-終止日期, $type-日期單位     $eyear   =   date("Y", strtotime(substr($endate, 0, 4)."-".substr($endate, 4, 2)."-".substr($endate, 6, 2)));     $syear   =   date("Y", strtotime(substr($stdate, 0, 4)."-".substr($stdate, 4, 2)."-".substr($stdate, 6, 2)));     $emonth   =   date("m", strtotime(substr($endate, 0, 4)."-".substr($endate, 4, 2)."-".substr($endate, 6, 2)));     $smonth   =   date("m", strtotime(substr($stdate, 0, 4)."-".substr($stdate, 4, 2)."-".substr($stdate, 6, 2)));     $eday   =   date("d", strtotime(substr($endate, 0, 4)."-".substr($endate, 4, 2)."-".substr($endate, 6, 2)));     $sday   =   date("d", strtotime(substr($stdate, 0, 4)."-".substr($stda...

特殊字元處理

在開發PHP專案中,總是會遇到表單輸入中文字或是特殊字元的情況。 為使用該表單的內容正確的存放到資料庫,必需經過一些處理才可能達成。 1. 首先將特殊字元加上『\』。    EX: 'abc'是一個代號,請相關部門\人員注意。    此段字串存在兩個特殊字元,『'』及『\』。    使用PHP 字串函數:addslashes("'abc'是一個代號,請相關部門\人員注意。"); 將會變成    『\'abc\'是一個代號,請相關部門\\人員注意。』 2. 一昧的使用的addslashes()函數,將會造成『\』的累加。存放此資料多次將會出現這個結果...    『\\\\'abc\\\\'是一個代號,請相關部門\\\\\\\\人員注意。』    為了避免此情況發生。我們可以使用get_magic_quotes_gpc()來判斷處理不必要的『\』。    EX:    echo get_magic_quotes_gpc();         // 1    echo $_POST['lastname'];             // O\'reilly    echo addslashes($_POST['lastname']); // O\\\'reilly    if (!get_magic_quotes_gpc()) {      $lastname = addslashes($_POST['lastname']);    } else {      $lastname = $_POST['lastname'];    }    echo $lastname; // O\'reilly    $sql = "INSERT INTO lastnames (lastname...

PHP 字串切割

PHP 切割字串 explode('切割旗標', '欲處理字串'); ex: 欲將$p_string切割,切割旗標為','。    $p_string = 'aaa,aab,aac,aad,aae,aaf';    $ar_string = explode(',',$p_string);    echo $ar_string[0]."[br]";    echo $ar_string[1]."[br]"; 結果    aaa    aab

取得各欄位長度-mysql

mysql_fetch_lengths() 回傳值為array $sql_desc = "SELECT user_id, user_name FROM userinfo "; $rs_desc = mysql_query($sql_desc); $column_len = mysql_fetch_lengths($rs_desc); echo $column_len[0]."〈br〉 "; echo $column_len[1]; ------------------------------------------------------------------ 4 12

簡化IF條件式

如果變數supply為A,則變數price等於10;否則1變數price等於12。 IF ($supply == 'A') {     $price = 10; } ELSE {     $price = 12; } 簡化後 $price = $supply == 'A' ? 10 : 12;

讀取陣列

循環讀取陣列的指令 foreach ($array as $value) { echo $value; } //----------------------------- foreach ($array as $key => $value) { echo $array[$key] = $value . '...'; } ※參考文獻- http://dettori.pixnet.net/blog/post/5256403