在寫 PHP 程式用到 header 函數轉換網頁時經常會看到
Warning: Cannot modify header information -
headers already sent by (output started at xxx/xxx.php:2) in xxx/xxx.php on line 2
尤其對於從 PHP4 (或更早版本) 升級成 PHP5 後
突如其來的一大串英文錯誤 (都是英文吧= =) 感到困惑
對絕大部分人來說 header 應該是很好用的轉換網頁的函數
因為當你按了上一頁後就看不到前面那個網頁啦~~
優購雲端科技 發表在 痞客邦 留言(0) 人氣()
再開始學習PHP時,我們常常需要安裝WEBSERVER,不管是IIS或是Apache;在安裝PHP的版本,若是使用資料庫通常會裝MYSQL。還有一大堆的MYSQL管理工具;喔!!! MYGOD!! 生命請花費到美好的事物上,不想寫程式也請不要去賣雞排。好啦,回歸正題
"VertrigoServ" 是一個OPENSOURCE的計畫,2.05版提供了
- Apache 2.0.55
- PHP 5.1.2
- MySQL 5.0.19
- SQLite 3.3.4
- PhpMyAdmin 2.8.0.1
- ZendOptimizer 2.6.2
- SQLiteManager 1.1.3
整合介面,若是初學PHP還是建議安裝這一套工具來使用,以下我用一些截圖來說明。
步驟一:
請先到
Vertrigo 下載最新的版本2.05.
步驟二:
執行Vertrigo_205.exe將程式安裝到 預設C:\Program Files\VertrigoServ
(未方便除錯,我自己設的路徑為 C:\MYPHP\VertrigoServ)
優購雲端科技 發表在 痞客邦 留言(0) 人氣()
介紹在WindowsXP(SP2) PHP+IIS的安裝方法(ISAPI方式)
1,把php-5.1.2-Win32.zip解壓放到C:PHP。
2,php.ini-dist改名為php.ini,extension_dir = c:\PHP\ext。
3,在php.ini中找尋extension=php_mysql.dll前面的";" 取消;符號。
4,複製php.ini到C:WINDOWS目錄下。
5.再複製php5ts.dll和libmysql.dll到C:\WINDOWS\system32中。
6.打開IIS,新增應用程式設定. (指向c:\php\php5isapi.dll)
如示:
優購雲端科技 發表在 痞客邦 留言(0) 人氣()
用以下的方式,可以讓大部份瀏覽器 (主要是 IE) 詢問你是否要下載檔案 (而不是直接開啟) 。
<?php
$file_name = "file.name";
$file_path = "/path/to/realfile";
$file_size = filesize($file_path);
header('Pragma: public');
header('Expires: 0');
header('Last-Modified: ' . gmdate('D, d M Y H:i ') . ' GMT');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
優購雲端科技 發表在 痞客邦 留言(0) 人氣()
關於
ImageMagick 跟
imagick 的安裝方式YOGO之在
「ImageMagick應用大全」 中已有詳細說明,若有不清楚的朋友請參考該篇教學,在此YOGO即不再贅述,本篇僅提供幾個應用方式。
1.生成縮圖
首先我們可以看到網站根目錄內有一個 (寬)800像素 X (高)600像素,大小69.5KB,名為 Sunset 的JPG圖檔 。
開啟一個PHP檔案,然後輸入如下程式碼
$imgFile = 'Sunset.jpg';
$simg = new Imagick($imgFile);
優購雲端科技 發表在 痞客邦 留言(0) 人氣()
關於
ImageMagick跟
imagick的安裝方式YOGO之在
「ImageMagick應用大全」中已有詳細說明,若有不清楚的朋友請參考該篇教學,在此YOGO即不再贅述,本篇僅提供幾個應用方式
。
1.生成縮圖
a.指定大小
首先我們可以看到網站根目錄內有一個 (寬)800像素 X (高)600像素,大小69.5KB,名為 Sunset 的JPG圖檔 。
開啟一個PHP檔案,然後輸入如下程式碼
exec('im_convert -sample 100x75 Sunset.jpg Sunset-01.jpg');
然後存檔並命名為index.php
開啟瀏覽器,並在網址的部份輸入 http://localhost/index.php
優購雲端科技 發表在 痞客邦 留言(0) 人氣()
一般使用者可能會認為在 PHP 下想要使用 iconv 的話,只要把 php.ini 裡面的分號 ; 拿掉就以了:
;extension=php_iconv.dll
一般像 GD2 之類的 Library 照這樣安裝是沒有錯,但是在 iconv 狀況就不同了,馬上就出現下面的畫面:
因為要啟動 iconv 的功能,除了 php_iconv.dll 之外,還需要一個 iconv.dll,也就是需要 php_iconv.dll 和 iconv.dll 都可以讓 php 找的到的狀況之下。所以正確安裝的方式是:
優購雲端科技 發表在 痞客邦 留言(0) 人氣()
[Javascript] 請勿用保留字來取 HTML 的標籤名
剛剛查一個 javascript 的 bug ,原因是 document.form1.submit(); 不能動作。出現的錯誤訊息是「物件不支援此屬性或方法」,這種 document.form1.submit(); 的 javascript 是再平常不過的指令,怎麼可能不支援呢?後來才發現,是美編把 submit 的按鈕取名叫 submit,也就是在 HTML 裡面有一行是:
<input type="submit" name="submit" value="submit">
這樣
document.form1.submit(); 就無法執行了,因為
document.form1.submit 已經變成那個按鈕的物件了,自然 submit 的 method 也無法動作。
因為自己不會犯這種用保留字來取 HTML Tag name 的錯誤,不過遇到對程式不熟的美編,還是會遇到這種狀況,只能自求多福了。
優購雲端科技 發表在 痞客邦 留言(0) 人氣()
PHP 跟 Javascript 都有 HTML encoding 的函式,編碼過的結果雖然類似,但是還是有些微的不同,所以不能互轉。
二者的差異可以可參考:
http://web.archive.org/web/20030811181238/http://php.weblogs.com/php_jscript_vbscript_1
節錄如下:
PHP:
urlencode( ) All punctuation, accented characters, and any other non-ASCII characters are replaced with %xx encoding. Spaces converted to +.
優購雲端科技 發表在 痞客邦 留言(0) 人氣()
遞迴篇
這個需求是在大鳥需要的拍賣網站會用到,其實一般搜尋引擎也常常會用類似這種「搜尋此分類下所有項目」的功能。
不過這篇不是講如何搜尋,而是要抓出分類之下的所有次分類,有了所有的分類之後,再下搜尋語法就沒什麼困難了。
我們先來定義一個簡單的分類結構範例:
女性用品 ->保養品 ->臉部
->身體
優購雲端科技 發表在 痞客邦 留言(0) 人氣()
如何禁止使用者執行某些 PHP 指令?
很多指令如 shell_exec、system、passthru、popen 等都是系統相關的指令,如果虛擬主機開放給使用者使用,或是在系統權限沒設定完整的情況下,必然會造成很大的傷害。
要達到這個需求,只要在 php.ini 裡設定 disble_function 這個選項就能設定禁止執行的指令了。
範例:
disable_functions = phpinfo
優購雲端科技 發表在 痞客邦 留言(0) 人氣()
在 Windows 下安裝 ImageMagick
1. 到
http://www.imagemagick.org/ 下載 Windows Executable 版本。
(建議下載 Stable 穩定版本)
2. 安裝下載回來的
ImageMagick-x.x.x-xxx-windows-dll.exe,建議用預設安裝即可;另外安裝時也請勾選
Update executable search path,以讓系統可以找到 ImageMagick 執行檔的位置;其他用不到的選項可以不勾選。
優購雲端科技 發表在 痞客邦 留言(0) 人氣()
在一般網站程式設計應用中,很多時後會需要用到檔案重新命名與檔案移動,那麼在PHP中該如何實現這2個需求呢?其實很簡單,只要用
rename()這個函式即可,其函式原型如下:
rename-檔案重新命名
語法:int rename (string oldname, string newname)
說明:試著將舊名稱oldname重新命名為newname;成功則傳回true,失敗則傳回false。
//如果在同目錄的檔案
rename("1.txt","2.txt");
另外,若不同路徑的話則會變成移動檔案
優購雲端科技 發表在 痞客邦 留言(0) 人氣()
之前YOGO曾在
「Mysql的日期加減運算」這篇文章中有提到MYSQL的日期加減運算,而這一篇文章則是提供PHP日期加減運算的解法;所先先來介紹一下4個PHP內建的日期函式,如下所示:
1.date() - 將本地的時間/日期格式化
語法 : string date (string format [, int timestamp])
說明 : 使用給予的timestamp按照格式化字串傳回一格式化字串,如果沒有給予timestamp則使用本地的時間。
或可參考YOGO
「php的時間函式(date)應用 」這篇文章。
2.mktime() 取得日期的UNIX時間戳記
語法 : int mktime (int hour, int minute, int second, int month, int day, int year [, int is_dst])
優購雲端科技 發表在 痞客邦 留言(0) 人氣()
YOGO在知識+看到一篇與酷學園相同的問題,分別是 「[php]如何於資料表中到期日前寄出一封信至用戶信箱?」 與 「[求助]如何於資料表中的到期日到時寄出一封信至該用戶信箱?」 ,其中有不少朋友其實已經提出解決之道,只是沒有加以實作而已,有鑑於此YOGO就野人獻曝一下,將之實作出來。
在原始問題中,提問者的原始問題如下:
目前我有做一個客戶資料管理程式,而在這支程式的資料表中我有規劃了用戶的信箱(email)租書到期日(booklimdate)與租片到期日(videolimdate),我想要讓租書到期日與租片到期日前30/15/7/3/1天寄出一封到期通知信給用戶的信箱,【內容比如說:敬愛的顧客xx您好!您向本店租賃的書籍將於$booklimdate到期,敬請注意還書日期,謝謝!! 】請問我該怎麼做呢?
要解決這個問題目前YOGO想的到的方法有2個,一個是用PHP中的date()函式處理,而另一個則是用Mysql的DATE_ADD() 函式來處理,而YOGO的這篇教學是用下Mysql中DATE_ADD()的這個函式來實作,若要用PHP來解決的話,請參考「PHP的日期加減運算」這篇文章,在實作之前我們先來認識一下Mysql中DATE_ADD() 的這個函式,其函式原型如下:
DATE_ADD(date,INTERVAL expr type)
date是一個指定開始日期的DATETIME或DATE值,expr是指定加到開始日期或從開始日期減去的間隔值一個表達式,expr是一個字符串﹔它可以以一個"-"開始表示負間隔。type是一個關鍵詞,指明表達式應該如何被解釋。EXTRACT(type FROM date)函數從日期中返回"type"間隔。下表顯示了type和expr參數怎樣被關聯:
優購雲端科技 發表在 痞客邦 留言(0) 人氣()
在作者所申請的幾個PHP 主頁空間中,能夠提供mail功能的實在不多,總是調用完mail()函數之後就毫無下文了。
但是電子郵件在網上生活中的作用越來越大作用我不想再說了,但是如果主頁空間不支持mail()發送那麼怎麼辦呢?我也想過通過socket來實現郵件 發送,但無奈對用php 進行socket編程不熟悉,再加上發送郵件要用到SMTP協議,又要讀不少的英文了,所以一直也沒有去研究過。
終於有一天我發現了一篇文章,關於用socket編程發送郵件。我如獲至寶般將其拷貝下來,並且將其改造成了一個php可用的類,供大家使用。
原來的文章只是一個簡單的例子,而且還有一些錯誤,在我經過多次的實驗、改造終於將其改成了一個直接使用socket,向指定的郵箱發送郵件的類,如果大家和前面關於發送MIME的文章結合起來,就可以實現在不支持mail()函數的網站上發送郵件了。
因為發送郵件的過程需要時間,可能與mail()的處理機制還不完全一樣,所以速度要慢一些,但是可以解決需要發送郵件功能的燃眉之急,同時你也可以學習用php 進行socket編程。下面就將這個類的實現原理介紹給大家,同時向大家講解一些關於SMTP的基本知識。
優購雲端科技 發表在 痞客邦 留言(0) 人氣()
Google 的 webmaster Eric Higgins 寫了一篇文章介紹怎樣
優化 PHP,文章刊登不久,PHP 開發團隊其中一員 Gwynne Raskind 發文
提出異議,指 Eric 所說的與事實不符,有些甚至完全相反,在 PHP 5 上幾乎沒有一項 Eric 的優化技巧能帶來實質的好處。我們摘錄了比較具爭議性的幾點,看看誰是誰非。
Eric Higgins: 不要沒來由的複製變量
Eric 說每次我們複製一個變量的時候,便會消耗一些記憶體,一些 PHP 初哥為了使他們的原碼「好讀」,喜歡把一些預定義變量複製到另一個名稱比較簡短、容易記憶的變量,這樣對程式的效能有負面的影響。在下面的例子中,如果用戶輸入了一段 512KB 的文字,程式便會消耗 1MB 的記憶體:
$description = strip_tags($_POST['description']);
echo $description;
我們沒有理由把文字複製到 $description,只需:
優購雲端科技 發表在 痞客邦 留言(0) 人氣()
在 Smashing Magazine 的網站,Glen Stansberry 提出十個進階 PHP 技巧,可以即時提昇你的 PHP 編程實力,其中包括 SQL 注入攻擊的「作弊表」、簡化判斷句中的 else 部分、在不得已的情況下才使用正規表達式、三元運算子、Memcached 數據庫快取系統等等,以下是詳細的內容。
PHP 在 1995 年從一個不起眼的編程語言開始,多年來迅速發展,現在已經是其中一種最流行的網絡開發語言,許多熱門網站均採用 PHP 來開發,絕大多數的程式和網站項目都是由這種流行語言寫成。
由於 PHP 如此受歡迎,任何網站開發人員幾乎都不能不認識 PHP,這份教程是為那些剛剛完成了 PHP 的學習初階,捲起衣袖準備大幹一番的人,下面列出的十個優秀技巧,是 PHP 開發人員必須學習,並在每次編程時使用它們,這些提示可以加快你們對 PHP 的熟練,使程式碼跑得更快捷,更簡潔,性能上更優化。
1. 使用 SQL 注入攻擊作弊表
SQL 注入攻擊是一種非常令人厭惡的東西,它是一種安全漏洞,允許黑客利用程式碼中的漏洞潛入你的數據庫。雖然本文與 MySQL 無關,不過許多 PHP 程式使用 MySQL 數據庫,若果你要寫安全的程式碼,懂得什麼情況需要避開是很有用的。
優購雲端科技 發表在 痞客邦 留言(0) 人氣()
這裡有一篇 Tsung 轉載的
「PHP 程式效能優化的 40 條建議」,覺得很不錯,例如使用 str_replace > preg_replace, 但是 strtr 又比 str_replace 快, $row['id'] 比 $row[id] 快 7 倍, 雖然有些龜毛了點, 偶爾注意一下也不錯,提供給有興趣的朋友參考一下。
原文:
40 Tips for optimizing your php code
轉載自翻譯:
優化PHP程式的40條建議
1.如果一個方法可靜態化,就對它做靜態聲明。速率可提升至4倍
2.echo 比 print 快
優購雲端科技 發表在 痞客邦 留言(0) 人氣()
雖然 PHP 有附 PDFlib,不過使用起來實在有點複雜。
優購雲端科技 發表在 痞客邦 留言(0) 人氣()