PHP+MySQL+Dreamweaver整合教學(PHPMaker運用設計網站教學):快速設計網站與網頁
總教頭特別企畫【專業整合課程】比傳統的學習的還要快速與實用!


感謝您造訪 PHP程式設計+MySQL資料庫+Dreamweaver整合教學(PHPMaker運用設計網站教學)密訓基地。 你可進入教學詳細內容介紹頁面,詳細瞭解PHP程式設計+MySQL資料庫(PHPMaker運用設計網站教學)及相關技術維護影片教學(完整配套措施),馬上可以設計架站程式與PHP網頁,快速建立MySQL資料庫、自動生成PHP網頁。可對資料庫進行瀏覽、修改、查詢、加入和刪除(整合成我們需要的網站)。

要在網路上經營網站賺大錢,不能只會下載現有的程式來架站(自己設計才能完全符合專業的特殊需求),你不用死背PHP語法,更可以完全不用花錢用購買資料庫(PHPMySQL完全免費!)你可以透過技術學習,讓PHP程式網頁+網路資料庫+Dreamweaver整合教學→讓你快速成為:【動態網站程式設計專家→你能因此賺大錢】!

 PHP程式設計+MySQL資料庫+Dreamweaver整合教學(PHPMaker運用設計網站教學):

http://por.tw/php/new-E_learning/index.php


PHP程式設計+MySQL資料庫+Dreamweaver整合教學(PHPMaker運用教學)密訓基地  總教頭  敬上



瀏覽模式: 普通 | 列表

為什麼我得不到變數(PHP程式教學問與答)

問題:我在一網頁向另一網頁POST資料name,為什麼輸出$name時卻得不到任何值?

技術回覆:在PHP4.2以後的版本中register_global預設為off

  若想取得從另一頁面送出的變數:

方法一:在PHP.ini中找到register_global,並把它設定為on.

方法二:在接收網頁最前面放上這個extract($_POST);extract($_GET);(注意extract($_SESSION)前必須要有Session_Start()).

方法三:一個一個讀取變數$a=$_GET["a"];$b=$_POST["b"]等,這種方法雖然麻煩,但比較安全.

  2:除錯你的程式

在運行時必須知道某個變數為何值。我是這樣做的,建立一檔案debug.php,其內容如下:

<?PHP
Ob_Start();
Session_Start();
Echo "<pre>";

Echo "本頁得到的_GET變數有:";
Print_R($_GET);

Echo "本頁得到的_POST變數有:";
Print_R($_POST);

Echo "本頁得到的_COOKIE變數有:";

Print_R($_COOKIE);

Echo "本頁得到的_SESSION變數有:";
Print_R($_SESSION);
Echo "</pre>";
?>

然後在php.ini中設定:include_path = "c:/php",並將debug.php放在此檔夾,以後就可以在每個網頁裏包括此檔,檢視得到的變數名和值.

  3:如何使用session

凡是與session有關的,之前必須呼叫函數session_start();

為session付值很簡單,如:

<?php
Session_start();
$Name = "這是一個Session例子";
Session_Register("Name");//注意,不要寫成:Session_Register("$Name");
Echo $_SESSION["Name"];
//之後$_SESSION["Name"]為"這是一個Session例子"
?>

在php4.2之後,可以為session直接付值:

<?PHP
Session_Start();
$_SESSION["name"]="value";
?>

取消session可以這樣:

<?php
session_start();
session_unset();
session_destroy();
?>
取消某個session變數在php4.2以上還有BUG.

注意:

1:在呼叫Session_Start()之前不能有任何輸出.例如下面是錯誤的.
==========================================
1行
2行 <?PHP
3行 Session_Start();//之前在第一行已經有輸出
4行 .....
5行 ?>
==========================================


提示1:

凡是出現"........headers already sent..........",就是Session_Start()之前嚮流覽器輸出資訊.

去掉輸出就標準,(COOKIE也會出現這種錯誤,錯誤原因一樣)

提示2:


如果你的Session_Start()放在迴圈語句裏,並且很難確定之前哪裡向流覽器輸出資訊,可以用下面這種方法:

1行 <?PHP Ob_Start(); ?>
........這裏是你的程式......
網站發生警語:atal error: Allowed memory size of 16777216 bytes exhausted(記憶體不夠用)之處理方法

網站架站或網站升級後,網站發生類似警語:atal error: Allowed memory size of XXXXXXXX bytes exhausted
不管是管理介面(Dashboard),或者登入出問題,看來幾乎都是記憶體不夠用。


例如其發生的警語:
Fatal error: Allowed memory size of 16777216 bytes exhausted (tried to allocate 4023 bytes)

這是什麼意思呢?又該如何解決?
答案是:記憶體的需求是更大了,這邊提供幾個解決的方法。

當出現以下的類似情況,要來調整PHP的記憶體,來執行更多的程式
1.找到php.ini的路徑(/etc/php5/apache2/php.ini)
2.搜尋:memory_limit 字串
3.找到:memory_limit = 16M      ; Maximum amount of memory a script may consume (16MB)

A.如果有權限修改php.ini,那麼請將memory_limit = 32M的32提高,看是要64還是96或者128。
    
B.如果沒有權限修改php.ini,可以在.htaccess裡面加上php_value memory_limit 32M,或者更高的數字。

備註:php.ini修改後apache要重新啟動才會生效!

語法如下:
service apache2 restart


-------------------------------------------------------------

PHP下載CSS檔案中的圖片的代碼

您想要使用PHP程式語法下載CSS檔案中的圖片嗎?
我相信每個做web的程式員也都會有類似的需求與想法。

在PHP下載CSS檔案中的圖片過程中,必不可少的需要下載樣式檔案中的圖片。
碰到比較龐大的樣式檔案,其中可能會有上百個需要下載的圖片,那麼使用下面這段小代碼是最為合適的了。

--------------------------------------------------------------------
< ?php
/*
More & Original PHP Framwork
Copyright (c) 2007 - 2008 IsMole Inc.

Author: kimi
Documentation: 下載樣式檔案中的圖片,PHP下載CSS檔案中的圖片工具
*/

//note 設定PHP逾時時間
set_time_limit(0);

//note 取得樣式檔案內容
$styleFileContent = file_get_contents('images/style.css');

//note 符合出需要下載的URL位址
preg_match_all("/url((.*))/", $styleFileContent, $imagesURLArray);

//note 迴圈需要下載的位址,逐個下載
$imagesURLArray = array_unique($imagesURLArray[1]);
foreach($imagesURLArray as $imagesURL) {
file_put_contents(basename($imagesURL), file_get_contents($imagesURL));
}
-----------------------------------------------------

改善PHP開發模式的方法

改善PHP開發模式的方法
  
關於如何使用PHP語系來開發應用程式,我們每個人都有自己的技巧和方法。
實際上,我們大家都知道,有很多種模式和方法可以讓開發變得更加簡單。
儘管如此,還是有一些方法,尤其是編碼樣式和習慣,是大家公認的。
我們列舉出了可以改善PHP開發模式的方法。

我們不應該輕視代碼的組織,選取的編碼樣式應該是事先約定好的,許多人只是隨機的在做這些事情,這讓他們的代碼變得十分混亂,十分令人難以理解。

你可以在那裡宣稱自己是最好的開發者,但是,如果你的代碼缺乏良好的組織,你是不會走的太遠的。
舉個例子,比如說,在當地的社區大學中,你是一名教師。
如果你決定從初級和進階的資料中隨機地選取一大堆知識,然後按照這種順序把這些知識教授給你的學生
而不是從初級到進階,循序漸進地教授給你的學生,那麼你的學生們會十分困惑,而且,作為一名教師,他們是不會歡迎你的,如果他們不歡迎你,他們就不會上你的課。

我的觀點是,找出一種適合你的組織方法和編碼樣式,並且一直堅持下去,這樣的話,你的代碼的組織和配置會變得十分有條理。

對於獨立的開發者來說,內定檔案並不是很流行,它主要是面向企業項目和開源項目的。
但是,這並不是說,內定檔案對你的項目沒有好處。對於你的項目來說,內定檔案是改善你的編碼和工作模式的重中之重。

許多支援PHP的整合開發環境(IDE)都支援內定檔案,這可以說明你記住你建立那些函數的時候用了哪些參數,或是,那些函數的功能是什麼?

如果你把你的項目移交給另外一個開發者或團隊,他們一定會對這份內定檔案心存感激的,因為它傳遞了和PHP項目(尤其是那些規模較大的PHP項目)有關的大量訊息。
 

如何避免使用php程式中的require_once語法?

如何避免使用php程式中的require_once語法?


我們知道,在php中使用require_once/include_once雖然方便,但是代價昂貴,據測試資料來看,require_once比require慢3-4倍,所以在php開發中,我們應該盡量使用require/include。

以下是筆者常用的避免require/include的方法。


使用__autoload

php5可以使用__autoload來避免require,用的好的話,代碼裡頭甚至看不到幾個require,實在是安逸啊。測試結果顯示,使用__autoload之後的new Foo; 比require_once 『foo.php』; new Foo; 大概要快3倍左右。

補充:為了避免autoload衝突,可以考慮使用spl_autoload_register(PHP 5 >= 5.1.2)來改變魔術函數__autoload的行為。

使用defined檢驗是否載入過

在代碼開頭使用defined檢驗是否定義過對應的常量,如果有的話,直接return。

<?php

if(!defined('_MYCLASS_'))

return;

define('_MYCLASS_', 1);

class MyClass { ... }

?>

測試了一下,defined的效能也不是太好…

require前檢查

用class_exists或是function_exists檢查一下,確認沒有載入過再出手,至少比require_once能快上3倍。php4也可以用上。

class_exists('myClass') or require('/path/to/myClass.class.php');

問題:
請問為什麼我向另一網頁傳送變數時,只得到前半部分,以空格開頭的則全部丟失?


<?php
$Var="hello php";//修改為$Var="   hello php";試試得到什麼結果
$post= "receive.php?Name=".$Var;
header("location:$post");
?>

receive.php的內容:


<?PHP
Echo "<pre>";
Echo  $_GET["Name"];
Echo "</pre>";
?>


回覆:
正確的方法是:


<?php
$Var="hello php";
$post= "receive.php?Name=".urlencode($Var);
header("location:$post");
?>

在接收頁面你不需要使用Urldecode(),變數會自動編碼.

PHP程式設計問題諮詢:
我想在每個檔最前,最後面都加上一檔.但一個一個添加很麻煩
有沒有解決的辦法?

---------------------------------------------------------
PHP程式設計問題回覆:
 我想在每個檔最前,最後面都加上一檔.但一個一個添加很麻煩
您可以這樣處理:

1:打開php.ini文件
設置 include_path= "c:"

2:寫兩個文件
auto_prepend_file.php 和 auto_append_file.php 保存在c磁碟,他們將自動依附在每個php檔的頭部和尾部.

3:在php.ini中找到:
Automatically add files before or after any PHP document.
auto_prepend_file = auto_prepend_file.php;依附在頭部
auto_append_file = auto_append_file.php;依附在尾部

以後你每個php檔就相當於
<?php
Include "auto_prepend_file.php" ;

.......//這裏是你的程式


Include "auto_append_file.php";
?>
---------------------------------------------------------

使用PHP執行linux系統指令

如何使用PHP執行linux系統指令呢?
相信這是很多學員想知道答案!

首先先要給大家介紹PHP執行linux系統指令的幾個基本函數。

system函數

說明:執行外部程式並顯示輸出資料。
語法:string system(string command, int [return_var]);
返回值: 字串

詳細介紹:
本函數就像是 C 語中的函數 system(),用來執行指令,並輸出結果。若是 return_var 參數存在,則執行 command 之後的狀態會填入 return_var 中。同樣值得注意的是若需要處理使用者輸入的資料,而又要防止使用者耍花招破解系統,則可以使用 EscapeShellCmd()。若 PHP 以模組式的執行,本函數會在每一行輸出後自動更新 Web 伺服器的輸出緩衝暫存區。若需要完整的返回字串,且不想經由不必要的其它中間的輸出介面,可以使用 PassThru()。

案例代碼:
< ?php
$last_line = system('ls', $retval);
echo 'Last line of the output: ' . $last_line;
echo '<hr />Return value: ' . $retval;
?>

exec函數
說明:執行外部程式。
語法:string exec(string command, string [array], int [return_var]);
返回值: 字串

詳細介紹:
本函數執行輸入 command 的外部程式或外部指令。
它的返回字串只是外部程式執行後返回的最後一行;若需要完整的返回字串,可以使用 PassThru() 這個函數。

要是參數 array 存在,command 會將 array 加到參數中執行,若不欲 array 被處理,可以在執行 exec() 之前呼叫 unset()。
若是 return_var 跟 array 二個參數都存在,則執行 command 之後的狀態會填入 return_var 中。

值得注意的是若需要處理使用者輸入的資料,而又要防止使用者耍花招破解系統,則可以使用 EscapeShellCmd()。

案例代碼:
<?php
echo exec('whoami');
?>  

popen函數
說明:開啟檔案。
語法:int popen(string command, string mode);
返回值: 整數

詳細介紹:
本函數執行指令開檔,而該檔案是用管道模式處理的檔案。
用本函數開啟的檔案只能是單向的 (只能讀或只能寫),而且一定要用 pclose() 關閉。
在檔案操作上可使用 fgets()、fgetss() 與 fputs()。若是開檔發生錯誤,返回 false 值。

案例代碼:
<?
$fp = popen( "/bin/ls", "r" );
?>  
PHP程式設計問題諮詢:
為什麼我升級PHP後,原來的程式出現滿螢幕的 Notice: Undefined variable:


---------------------------------------------------------
PHP程式設計問題回覆:
 Notice: Undefined variable:
這是警告的意思,由於變數未定義引起的.
打開php.ini,找到最下面的error_reporting,修改為error_reporting = E_ALL & ~E_NOTICE

對於Parse error錯誤
error_reporting(0)無法關閉.
如果你想關閉任何錯誤提示,打開php.ini,找到display_errors,設置為display_errors = Off.以後任何錯誤都不會提示.

隱藏apache和php的版本訊息可以盡量減少敏感訊息洩露的方法,並不會使你的伺服器真的更安全,如果你現在使用的版本比較舊,請務必盡快將系統升級,降低被蠕蟲攻擊的風險。

隱藏apache和php的版本訊息,web server避免一些不必要的麻煩,可以把apache和php的版本訊息不顯示


隱藏 Apache 版本訊息

/etc/apache2/apache2.conf 或 /etc/httpd/conf/httpd.conf

ServerTokens ProductOnly
ServerSignature Off

重啟 apache
現在 http 頭裡面只看到:
Server: Apache

隱藏 PHP 版本
php.ini

expose_php On
改成
expose_php Off

重啟apache後,php版本在http頭中隱藏了。

詳解 :

為了防止某些別有用心的傢伙窺視我們的伺服器,應該做些什麼.
我們來看一下關聯的2個參數,分別為ServerTokens和ServerSignature,通過控制這2個閥門應該就能起到一些作用,比如我們可以在配置檔案中這麼寫:
ServerTokens Prod
ServerSignature Off

ServerTokens
用於控制伺服器是否相應來自使用者端的請求,向使用者端輸出伺服器系統類型或內建模組等重要的系統訊息。 在主配置檔案中提供全局控制預設閥值為"Full"(ServerTokens Full),所以,如果你的Linux發行版本沒有變更過這個閥值的話,所有與你的系統有關的敏感訊息都會向全世界公開。比如RHEL會將該 閥值變更為"ServerTokens OS",而Debian依然使用預設的"Full"閥值
以apache-2.0.55為例,閥值可以設定為以下某項(後面為相對應的Banner Header):
Prod >>> Server: Apache
Major >>> Server: Apache/2
Minor >>> Server: Apache/2.0
Minimal >>> Server: Apache/2.0.55
OS >>> Server: Apache/2.0.55 (Debian)
Full (or not specified) default >>> Server: Apache/2.0.55 (Debian) PHP/5.1.2-1+b1 mod_ssl/2.0.55 OpenSSL/0.9.8b

ServerSignature
控制由系統生成的頁面(錯誤訊息,mod_proxy ftp directory listing等等)的頁腳中如何顯示訊息。

可在全局設定檔案中控制,或是通過.htaccess檔案控制
預設為"off"(ServerSignature Off),有些Linux發行版本可能會開啟這個閥門,比如Debian在預設的虛擬主電腦上預設將這個閥門設定為開放
全局閥門的閥值會被虛擬主電腦或目錄單位的配置檔案中的閥值所覆蓋,所以,必須確保這樣的事情不應該發生
可用的閥值為下面所示:
Off (default): 不輸出任何頁腳訊息 (如同Apache1.2以及更舊版本,用於迷惑)
On:輸出一行關於版本號以及處於運行中的虛擬主電腦的ServerName (2.0.44之後的版本,由ServerTokens負責是否輸出版本號)
EMail: 建立一個傳輸到給ServerAdmin的"mailto"

注意:上述關於如何設定2個閥門從而盡量減少敏感訊息洩露的方法,並不會使你的伺服器真的更安全,如果你現在使用的版本比較舊,請務必盡快將系統升級,降低被蠕蟲攻擊的風險。

本PHP程式設計+MySQL資料庫+Dreamweaver整合教學(PHPMaker運用設計網站教學)密訓基地立志於收集各類PHP程式設計、MySQL資料庫及網頁設計技術教學資訊,便於本人和廣大網友及網友查詢檢索,無論公司或個人認為本站存在侵權內容均可與本站聯繫,任何此類反饋資訊一經查明屬實後,將立即移除!