[PHP] 架站教學

以下教學僅適用於自己手動打造 LAMP 環境!

LAMP是基於 Linux,Apache,MySQL/MariaDB 和 PHP 的開放資源網絡開發平台。PHP是一種有時候用Perl或Python可代替的編程語言。這個術語來自歐洲,在那裡這些程序常用來作為一種標準開發環境。名字來源於每個程序的第一個字母。

每個程序在所有權裡都符合開放源代碼標準:Linux 是開放系統;Apache 是最通用的網絡服務器;mySQL 是帶有基於網絡管理附加工具的關係數據庫;PHP 是流行的對象腳本語言,它包含了多數其它語言的優秀特徵來使得它的網絡開發更加有效。

開發者在Windows操作系統下使用這些Linux環境裡的工具稱為使用WAMP。☞ 自己動手打造WEB服務器 Windows + Apache + PHP + MySQL


〈1〉我的安裝環境
作業系統Windows 7 SP1 (64位元作業系統)
必要套件Microsoft Visual C++ Redistributable for Visual Studio 2012

〈2〉我的安裝順序
# 版本 載點
1. ApacheVC11 Apache 2.4.17 Win32httpd-2.4.17-win32-VC11.zip
2. PHPPHP 5.6 (5.6.16) VC11 x86 Thread Safephp-5.6.15-Win32-VC11-x86.zip
3. MySQLMySQL Community Server 5.7.15 Windows (x86, 64-bit), ZIP Archive **2016.09.22紀錄mysql-5.7.15-winx64.zip
4. phpMyAdminphpMyAdmin 4.6.4 **2016.09.22紀錄phpMyAdmin-4.6.4-all-languages.7z
Apache 安裝重點
01當您欲安裝 Apache 2.4 binaries VC11 前,請先安裝好 Microsoft Visual C++ Redistributable for Visual Studio 2012 (☞ 請詳讀文件 )
02我該安裝 Apache Win64 還是 Win32 呢?

[我的電腦] 按右鍵 [內容],如果您的作業系統類型為 64 位元作業系統,基本上就安裝 Win64,但如果您想安裝 Win 32 也是可以的!

Win64 能承載比較多記憶體,當個人電腦使用 Photoshop 或 AutoCAD 可能用到很多記憶體的繪圖軟體時,才會明顯感受得到 Win 32 與 Win64 的差異性。如果肚子比較大,食物不夠多,肚子小或大就沒感覺有差,因此 64 的電腦,那其實兩種都可以裝。

〈3〉專案資料夾結構 D糟/
└── AppServ/
         └── Apache24/ .......... Apache folder
         └── doc/ ..................... 自建文件
         └── htdocs/ ................ 專案根目錄
                  └── phpMyAdmin/ ................ phpMyAdmin folder
         └── MySQL/ ............... MySQL folder
         └── PHP/ .................... PHP folder
         └── setup/ ................. 安裝軟體
         └── temp/ .................. 存放暫存檔案

〈4〉Config設定
Apache 更改設定檔:httpd.conf

1. 更改 ServerRoot 路徑,例:d:/AppServ/Apache24
ServerRoot "Apache路徑"
ScriptAlias /cgi-bin/ "Apache路徑/cgi-bin/"
<Directory "Apache路徑/cgi-bin">
ServerAdmin localhost@localhost
ServerName localhost:80

2. 更改 DocumentRoot 路徑,例:d:/AppServ/htdocs
(1) 新增一個叫做 htdocs 的資料夾,放在 AppServ 底下
(2) 在 htdocs 資料夾內,新增一個檔案,檔名需與 Apache/conf/httpd.conf 內 DirectoryIndex 後面接的檔名一致


DocumentRoot "專案路徑"
<Directory "專案路徑">
AllowOverride All
DirectoryIndex index.php index.html

3. 開啟模組:mod_rewrite 轉寫模組
改變您的網址,讓網站可以獲得安全效益。對於網址重寫來說很重要的 Apache 伺服器模組,這個模組可以讓你在無需額外安裝任何軟體,並且不會對網站訪客造成負面影響的情況下,輕鬆改變網址結構,也因此若要使用網址重寫規則的話,就必須要開啟此模組。開始編寫你的.htaccess file

LoadModule rewrite_module modules/mod_rewrite.so

<網址重寫規則>
有許多網站都有使用所謂的虛擬靜態技術,這種技術的一大特色在於網址末端明明就是 .html 但卻能顯示只有 PHP 或 ASP 這類伺服器程式才能處理的資訊。使用這種技術能為網站帶來許多好處,像是能增進 SEO 並讓網站較容易被搜尋引擎收錄,或是網址看起來比那種後面接了一大堆參數的基礎網址還要乾淨等。☞ 讓網站連結變得人性化!解析 URL Rewrite 網址重寫規則的概念與原理!

4. 檔尾加入:限制顯示伺服器的可用信息
ServerSignature Off
ServerTokens Prod

5. 檔尾加入:載入PHP
LoadModule php5_module "PHP路徑/php5apache2_4.dll"
AddType application/x-httpd-php .php
PHPIniDir "PHP路徑"  

安裝Apache
於 DOS 視窗底下,找到 /bin/ 底下,輸入「httpd.exe -k install」後,按「Enter」,即可啟動 Apache。

移除Apache
於 DOS 視窗底下,找到 /bin/ 底下,輸入「httpd.exe -k uninstall」後,按「Enter」,即可移除 Apache。

啟動Apache:建立 /bin/ 底下 ApacheMonitor.exe 的捷徑於「啟動」資料夾內
Win 7 啟動的路徑:C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup

Windows 8 怎麼找不到啟動資料夾?

現在您可以在網址列輸入:http://localhost,輸入完成後,按鍵盤上的 [Enter] 鍵,網頁顯示 (第2點) 的檔案內容
php 更改設定檔:php.ini

expose_php = Off
memory_limit = 32M
error_reporting = E_ALL & ~E_NOTICE
error_log = "temp路徑/php_errors.log"
extension_dir = "PHP路徑/ext"
upload_tmp_dir = "temp路徑/upload"
allow_url_fopen = Off
extension=php_curl.dll
extension=php_gd2.dll
extension=php_mbstring.dll
extension=php_mysql.dll
extension=php_mysqli.dll
extension=php_pdo_mysql.dll
extension=php_pdo_odbc.dll
extension=php_pdo_pgsql.dll
extension=php_pdo_sqlite.dll
date.timezone = "Asia/Taipei"
session.save_path = "temp路徑/session"
MySQL1. 下載文件,並解壓縮
2. 配置 my.ini 文件
3. 建立 data 資料夾
cd MySQL路徑\bin
mysqld --initialize-insecure --console

4. 掛載 MySQL 服務
mysqld --install

5. 啟動 MySQL 服務
net start mysql

6. 變更密碼
mysql -uroot -p
set password = password(‘你的新密碼‘);
**mysql指令後面要加「;」,直接按「Enter」只能當跳行看

下載安裝配置與使用MySQL-5.7.12-winx64.zip
環境變數電腦> 變更設定> 進階> 環境變數> Path
Path變數值追加:Apache路徑\bin;PHP路徑;PHP路徑\ext;MySQL路徑\bin

〈5〉PHP更多說明

IIS, Apache
01使用IIS,需要選擇Non-Thread Safe(NTS)版本的PHP。
02使用Apache Lounge(website:http://apachelounge.com/),可以選擇PHP VC11 X86或者X64版本。
03使用apache.org(website:http://www.apache.org/),下載的Apache1或者Apache2來搭建PHP環境的話,只能使用VC6版本,無法使用VC9+以上版本。
VC6, VC9, VC11
04php 5.3以後,沒有VC6版本提供下載了。
05VC9和VC11,是PHP的最新版本,其中包含了對於性能和穩定性的改進。
06VC9:通過 Visual Studio 2008 編譯,要求用戶安裝Microsoft Visual C++ 2008 SP1 Redistributable Package(x86 | x64)。
07VC11:通過 Visual Studio 2012 編譯,要求用戶安裝Visual C++ Redistributable for Visual Studio 2012(x86 | x64)。
TS, NTS
08TS:Thread Safe 可支援多執行緒, 執行時會進行多執行緒(Thread)安全檢查。
NTS:Non Thread Safe 非支援多執行緒, 在執行時不進行多執行緒(Thread)安全檢查。
09使用Apache+PHP的模式下,一般是把PHP作為一個Module load到apache中,那麼以apache父進程-多子進程的工作模式,是需要進行多執行緒檢查的,所以如果是以這種方式執行php,選擇ts版本。
X86, X64
10x86表示32位元, x64表示64位元, 位數對於安裝VC11有幫助, 個人建議VC11 X86, X64兩個版本都安裝上比較好, 反正沒衝突,然後啟動服務。
PHP版本中的VC6,VC9,VC11,TS,NTS區別

〈6〉參考資料步驟 3:規劃 PHP 應用程式安全性
php相關設定
Apache2 SSL In Test Environment
手動安裝(非 *.msi 封裝)Apache 2.4.2 於 Windows 成功紀要
AppServ|安裝後無法啟用apache的原因 ( skype 它預設會占用 80 port )


☞ 使用 root user
因為操作 Apache 需要 root 權限,所以建議用以下指令將權限提權到 root 等級
$sudo su //切換到super user

sudo 其實是 super user do ,也就是用超級使用者的權限做些事情的意思 ,而後面的 su 代表的是 super user,所以這行的意思就是:我用超級使用的的權限,將當前的權限提升到超級使用者的等級在Mac上設定 Apache & PHP 環境(極新手向)

☞ Finder> 工具程式> 終端機
〈1〉安裝apache
01Mac內建Apache,手動啟用
02指令
sudo apachectl start     # 啟動伺服器
sudo apachectl -v     # 查看伺服器版本
sudo apachectl restart     # 重新啟動伺服器
sudo apachectl stop     # 關閉伺服器

* 密碼:請輸入登入該帳號的密碼
03確認Apache Web Server 啟動成功
開啟瀏覽器輸入網址「http://localhost」,會看到 It Works
04(根目錄) 預設的網站資料夾位置,在『/Library/WebServer/Documents』
05[ httpd.conf ]
1. DirectoryIndex index.php index.html
2. AllowOverride All → 啟用.htaccess
3. LoadModule php7_module libexec/apache2/libphp7.so→ Mac內建PHP,手動啟用
4. LoadModule rewrite_module modules/mod_rewrite.so → 允許網址重寫

[修改 config 檔內容的方法]
1. 把 httpd.conf 檔先移到 [桌面] 上來做編輯
sudo mv /etc/apache2/httpd.conf ~/Desktop

2. 檔案預設的權限是無法寫入,輸入指令來修改這個檔案權限
sudo chmod 646 ~/Desktop/httpd.conf

3. 請用「文字編輯」來開啟 httpd.conf 修改

4. 把 httpd.conf 的檔案權限改回來
sudo chmod 646 ~/Desktop/httpd.conf

5. 把 httpd.conf 檔案移回 /etc/apache2
sudo mv ~/Desktop/httpd.conf /etc/apache2
〈2〉安裝php
01Mac內建PHP,手動啟用
02[ php.ini ]
1. date.timezone = Asia/Taipei (時區)
2. error_log = "/Library/WebServer/Documents/temp/php_errors.log" (Log 檔存取位置)
3. extension_dir = "ext" (延伸套件載入路徑)
4. upload_tmp_dir = "\Library\WebServer\Documents\temp\upload" (檔案暫存位置)
5. session.save_path = "/Library/WebServer/Documents/temp/session" (Session 暫存位置)
6. display_errors = On
7. 開啟延伸套件
□ extension=curl (載入安全性加強)
□ extension=gd2 (載入圖形驗證 GD 函式)
□ extension=mbstring (配合 phpmyadmin 安裝使用)
□ extension=mysqli (載入延伸套件 php_mysqli)
□ extension=pdo_firebird
□ extension=pdo_mysql
□ extension=pdo_oci
□ extension=pdo_odbc
□ extension=pdo_pgsql
□ extension=pdo_sqlite

[修改 ini 檔內容的方法]
1. 使用 php.ini.default 拷貝出一個 php.ini
cd /etc/
sudo cp php.ini.default php.ini

2. 把 php.ini 檔先移到 [桌面] 上來做編輯
sudo mv /etc/php.ini ~/Desktop

3. 檔案預設的權限是無法寫入,輸入指令來修改這個檔案權限
sudo chmod 646 ~/Desktop/php.ini

4. 請用「文字編輯」來開啟 php.ini 修改

5. 把 php.ini 的檔案權限改回來
sudo chmod 646 ~/Desktop/php.ini

6. 把 php.ini 檔案移回 /etc
sudo mv ~/Desktop/php.ini /etc
03 [問題] 如何查看 etc 資料夾?
Finder> 前往> 前往檔案夾> /etc/
參考: [Mac]如何修改、去哪修改Hosts檔內容?

[問題] 如何查看 php 的版本?
Finder> 工具程式> 終端機> php -v

[問題] OS X 10.10自帶的 PHP 版本是 PHP 5.5.x,如果我們想更新 PHP 的版本到 5.6 或者是 7.0 該怎麼辦呢?

升級到更高階 PHP 版本,可以透過 brew 或者 curl 兩種方式來安裝
curl指令 - 利用URL規則在命令列下工作的檔案傳輸工具

1.下載和安裝PHP 5.6
● PHP 5.6 的版本會被安裝到下面的路徑中:/usr/local/php5/
● php.ini 在 /usr/local/php5/lib/php.ini
● 擴展的一些配置都在 /usr/local/php5/php.d/ 目錄下
curl -s http://php-osx.liip.ch/install.sh | bash -s 5.6

2. 更改 MAC 環境變數
修改方法是使用 .bash_profile 方法來達成,這個檔案會在使用者登入時執行。所以是針對使用者的,並不會影響其他帳號。
1) 打開終端機
2) 輸入 sudo vim ~/.bash_profile 叫出 vi 編輯器後 (vim 是進階版的vi)
3) 將路徑輸入在檔案裡
export PATH=/usr/local/php5/bin:/usr/local/php5/sbin:$PATH
4) 存檔並關閉編輯器
5) source ~/.bash_profile 這可以讓系統去執行 .bash_profile 使路徑馬上生效,這樣就完成了。
6) 現在可以檢查一下路徑 echo $PATH

來源: MAC OS X 如何更改系統路徑與環境變數
參考: mac下快速安裝php的各個版本
參考: mac下更新自帶的PHP版本到5.6或7.0
參考: macOS 上安装 PECL
參考: [Mac] 修改環境變數下的路徑

〈3〉安裝MySQL
01官網下載 http://dev.mysql.com/downloads/mysql
02選擇版本
03先安裝mysql~x86_64.pkg #mysql安裝
04再安裝MySQL.prefPane #在「系統偏好設定」中看到「MySQL」選項
05最後安裝MySQLStartupItem.pkg #系統啟動後,mysql自動啟動
參考: mac下停止和啟動mysql命令
#啟動 MySQL 服務
sudo /usr/local/mysql/support-files/mysql.server start

#停止 MySQL 服務
sudo /usr/local/mysql/support-files/mysql.server stop

#重啟 MySQL 服務
sudo /usr/local/mysql/support-files/mysql.server restart
06[ 設定root密碼 ]
1. 一開始安裝好mysql時,root可能尚未設定密碼,可以用以下指令設定
2. cd /usr/local/mysql/bin
3. 執行更換密碼: ./mysqladmin -h localhost -u root password 新密碼
4. 連線測試 ./mysql -u root -p
5. 出現輸入密碼時,輸入剛剛輸入的新密碼,成功的話應該會進入 Mysql 命令列
07[問題]
[已解決]
(原來phpinfo)
mysql.default_socket /var/mysql/mysql.sock /var/mysql/mysql.sock
mysqli.default_socket /var/mysql/mysql.sock /var/mysql/mysql.sock
pdo_mysql.default_socket /var/mysql/mysql.sock /var/mysql/mysql.sock

(unix socket)
UNIX socket /tmp/mysql.sock


[問題] Mysql中如何查看版本前往解決方案
〈4〉安裝phpMyAdmin
01官網下載 http://www.phpmyadmin.net/home_page/downloads.php
02選擇版本
03下載後直接解壓縮,放至網頁根目錄下
04[ config.inc.php ]
將config.sample.inc.php復制成config.inc.php
05 [問題]
Cannot start session without errors, please check errors given in your PHP and/or webserver log file and configure your PHP installation properly. Also ensure that cookies are enabled in your browser.

Error during session start; please check your PHP and/or webserver log file and configure your PHP installation properly. Also ensure that cookies are enabled in your browser. session_start(): open(SESSION_FILE, O_RDWR) failed: Permission denied (13) session_start(): Failed to read session data: files (path: /Library/WebServer/Documents/temp/session)

[已解決]
cd /Library/WebServer/Documents/
sudo chmod 777 temp

add the setting a 777 to the session.save_path folder。phpmyadmin要啟用,需要讀取php.ini裡的session.save_path

[問題] #2002 無法登錄 MySQL 服務器


[已解決]
出現這個錯誤,表示沒有連接到數據庫。修改config.inc.php文件:
將$cfg['Servers'][$i]['host'] = 'localhost';
改為$cfg['Servers'][$i]['host'] = '127.0.0.1';

參考: phpmyadmin登錄提示mysqli_real_connect(): (HY000/2002): No such file or directory解決

[問題]
mysqli_real_connect(): The server requested authentication method unknown to the client [caching_sha2_password]

mysqli_real_connect(): (HY000/2054): The server requested authentication method unknown to the client



[已解決]
全新的 MySQL8.0 正式發布後,第一時間嚐鮮登陸 phpmyadmin 的人,估計會碰到上面兩種錯誤提示。因為新的 MySQL 8.0.11 默認使用的是 caching_sha2_password 身份驗證方法。

[辦法1] 修改默認加密方式mysql_native_password
OS X 系統安裝的 mysql 默認是不用 my.cnf 配置文件的,僅是使用默認的數據庫配置值。如要進行數據庫定制,可到'/usr/local/mysql/support-files/'文件夾底下,把裡面的任一個 .cnf 配置文件複製到 /etc/ 目錄底下並修改文件名稱為 my.cnf。不過 MAC OS X 系統的 mysql 確實不需要 my.cnf 來進行配置,就已經足夠可以使你滿意運行了。

[辦法2] 修改登陸不上賬號的加密方式
> use mysql
> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '你的密碼';
> FLUSH PRIVILEGES;
參考: mysql8.0.11用戶密碼設置注意事項
參考: 全新的MySQL8.0帶來的不止速度還有麻煩
參考: Mac OS X 中mysql的配置文件my.cnf的位置

[問題] 設定檔案需要設定加密密碼(blowfish_secret)


[已解決]
修改config.inc.php文件:
將$cfg['blowfish_secret'] = '';
改為$cfg['blowfish_secret'] = 'xxxxxxxxxxxxxxx'; //在引號裡面輸入超過 32 個字元的英數作為亂數密碼

參考: phpMyAdmin 設置

[問題] 無法存取 $cfg['TempDir'] (./tmp/)。phpMyAdmin 會無法快取模版,並且會因為此原因變得很慢。


[已解決]
這個主要是phpmyadmin目錄下缺失tmp文件夾,或者tmp文件夾權限設置引起的,這樣解決辦法就簡單了。直接打開相應目錄phpmyadmin,在這個目錄下新建文件夾tmp ,然後右鍵屬性設為777,這樣就解決了。

參考: phpmyadmin:變量 $cfg[‘TempDir’] (./tmp/)無法訪問。 phpMyAdmin無法緩存模板文件,所以會運行緩慢

[問題] 登入後,首頁底下出現 尚未設定 phpMyAdmin 設定儲存空間,部份延伸功能將無法使用。或者前往任一個資料庫的 '操作' 頁籤設定。

[已解決]
修改config.inc.php文件,增加一筆內容:
$cfg['PmaNoRelation_DisableWarning'] = 'true';

參考資料

[Mac]不用懶人包,在 OS X 上安裝 Apache, PHP, MySQL

曾經遇過的程式問題解決方案

01/PHP

PHP: Call to undefined function mb_strlen() - on custom compiled PHP with mbstring enabled
php獲取月第一天和最後一天
PHP - remove <img> tag from string
How can use PHP to check if a directory is empty?
計算中文檔名檔案大小:iconv()轉碼
windows 系統中的中文檔名仍是以Big5為主
上傳中文檔名:iconv()轉碼
刪除上傳的中文檔案:iconv()轉碼
單引號本身以及反斜線,要用「\'」或者「\\」才能顯示單引號或反斜線
php 處理textarea的換行
Quickly Removing Empty Array Elements in PHP
PHP怎麼判斷一個文件的時間是否超過2天或者幾個小時?
PHP把時間處理成多少分鐘前
Find URLs in Text, Make Links
getcwd() 函數返回當前目錄
implode() (將array組成一個字串)
Check if string contains specific words? strpos() (從字串中找到自己想要的某個字元)
將數字補零(使用str_pad)
Get all days and date for a given month 印出整個月的日期
變數(Variables) $$變數的用法
Can we do multiple explode statements on one line in PHP? 切割網址
日期時間轉換成中文星期幾
兩個日期之間共是幾個月
兩個日期之間共是幾個月2
cal_days_in_month() Function 取得某年中的某月的該月總天數
cal_days_in_month () function is not working
PHP上傳檔案,透過 PHP $_FILES 陣列輕鬆上傳檔案
Get The First Image From a Post 取得文章中第一張圖

03/CSS

select 箭頭
Transparent Contact Form 透明input
線條式input
How to style a <select> dropdown with CSS only without JavaScript?
Style a Select Box Using Only CSS
need help CSS centering with absolute positioning
Absolute positioning inside relative positioning?
Can I color table columns using CSS without coloring individual cells?
8 different ways to beautifully style your lists
Make a link have 100% width
CSS: Responsive way to center a fluid div (without px width) while limiting the maximum width?
How to use CSS to surround a number with a circle?
價格牌CSS
Fullscreen Background Image Slideshow with CSS3
CSS: width of a link doesn't change by setting the width attribute
display: table-cell 無法使用 margin/ padding 的解法
HTML將footer置底的方法(使用CSS)
margin裡的auto通常是拿來「置中對齊」使用
Why doesn't margin:auto center an image?
Fade and Blur on Hover Data Table
Simple Little Table CSS3
How to change the height of a <br>?
將table置中的css語法 table {margin-left:auto; margin-right:auto;}
3個div並排
floating footer always on the bottom and visible
3 COOL CSS3 IMAGE HOVER EFFECTS
position:absolute + visibility:hidden 隱藏元素
如何用純CSS固定thead實現表格滾動? tbody設置overflow之密
適合手機瀏覽的圖片大小
DIV區塊內文字左右對齊
DIV 並排語法
div 實現長英文字母自動換行CSS (white-space:normal; )
CSS自動換行,防止撐破DIV
How To Create Flat Style Breadcrumb Links with CSS (建立麵包屑)
Flat CSS3 Breadcrumb (建立麵包屑)
CSS DIV 置中最簡單的方法,相容各式瀏覽器


Image Source

Briefly about PHP

沒有留言:

技術提供:Blogger.