寫教學的最大目的是教會未來的自己

PHP

  • Page 1 of 2
  • 1
  • 2
  • >

關於PHP7升級這檔事,一個商業網站升級的經驗談

幾個月前,我幫我們公司網站,進行了一次系統性升級,其中包括了CentOS、PHP、tomcat、Java,前前後後花了超過三個月的時間, 當然中間還要持續做網站內容的更新維護,這次僅針對PHP的部分進行說明

因為公司網站有點歷史,所以這次升級是從php5.3升級至7.3,一口氣填補了很多前輩在公司挖得坑,這次我就列舉出一些我所知道的狀況,我的作法是無痛轉移,所以事先把網站內容改進程前後版本都通用後,才用臨時server做切換

1. E_DEPRECATED 是最基本的,他會告訴你使用到的函示庫中那些是即將失效的,看著LOG把所有的code改過一輪吧,這是最簡單,但又是最耗時的,為了解決mysql被廢棄的問題,我整合了網站中所有相關功能成一個class,最後在一次性改成mysqli

2.語法規則更加嚴格了,因為我一次跨多個版本更新,這部分我是在PHP7 的測試機台中,人肉把所有頁面檢查過一遍,確認沒有問題,這部份十分麻煩,因為有時候功能故障,網頁卻能正常顯示,主要的變更有array 跟 字串之間無法自由切換,function 輸入的變數如果不固定一定要給預設值,不再會有預設的false了,這部分算是強制改正工程師們的寫作習慣

3.global regester 根本是個恐怖的坑,因為這個我們卡在PHP5.3 很久了,為了清理這個問題真的是一把鼻涕一把淚,毫無快速搜尋的方法OTZ

4.老的wordpress 版本升級也很恐怖…..不提了….

網站就算經過三組人馬 花了一個多月的時間做最後檢查,網站上線後,還是會發現一些細微的功能出現異常…..

Post to Twitter Post to Plurk Post to Facebook Send Gmail

PHP 所有$_SERVER的可用參數表

引用自 http://www.w3schools.com/php/php_superglobals.asp

下表列出了可以去裡面$ _SERVER中最重要的元素:

Element/Code Description
$_SERVER[‘PHP_SELF’] Returns the filename of the currently executing script
$_SERVER[‘GATEWAY_INTERFACE’] Returns the version of the Common Gateway Interface (CGI) the server is using
$_SERVER[‘SERVER_ADDR’] Returns the IP address of the host server
$_SERVER[‘SERVER_NAME’] Returns the name of the host server (such as www.w3schools.com)
$_SERVER[‘SERVER_SOFTWARE’] Returns the server identification string (such as Apache/2.2.24)
$_SERVER[‘SERVER_PROTOCOL’] Returns the name and revision of the information protocol (such as HTTP/1.1)
$_SERVER[‘REQUEST_METHOD’] Returns the request method used to access the page (such as POST)
$_SERVER[‘REQUEST_TIME’] Returns the timestamp of the start of the request (such as 1377687496)
$_SERVER[‘QUERY_STRING’] Returns the query string if the page is accessed via a query string
$_SERVER[‘HTTP_ACCEPT’] Returns the Accept header from the current request
$_SERVER[‘HTTP_ACCEPT_CHARSET’] Returns the Accept_Charset header from the current request (such as utf-8,ISO-8859-1)
$_SERVER[‘HTTP_HOST’] Returns the Host header from the current request
$_SERVER[‘HTTP_REFERER’] Returns the complete URL of the current page (not reliable because not all user-agents support it)
$_SERVER[‘HTTPS’] Is the script queried through a secure HTTP protocol
$_SERVER[‘REMOTE_ADDR’] Returns the IP address from where the user is viewing the current page
$_SERVER[‘REMOTE_HOST’] Returns the Host name from where the user is viewing the current page
$_SERVER[‘REMOTE_PORT’] Returns the port being used on the user’s machine to communicate with the web server
$_SERVER[‘SCRIPT_FILENAME’] Returns the absolute pathname of the currently executing script
$_SERVER[‘SERVER_ADMIN’] Returns the value given to the SERVER_ADMIN directive in the web server configuration file (if your script runs on a virtual host, it will be the value defined for that virtual host) (such as [email protected])
$_SERVER[‘SERVER_PORT’] Returns the port on the server machine being used by the web server for communication (such as 80)
$_SERVER[‘SERVER_SIGNATURE’] Returns the server version and virtual host name which are added to server-generated pages
$_SERVER[‘PATH_TRANSLATED’] Returns the file system based path to the current script
$_SERVER[‘SCRIPT_NAME’] Returns the path of the current script
$_SERVER[‘SCRIPT_URI’] Returns the URI of the current page

Post to Twitter Post to Plurk Post to Facebook Send Gmail

好用的網頁技術學習網站codecademy

經過兩周成功嶺的”專業訓練”(大概是調整了生活作息吧) 終於進入了職場,正式脫離了學生身分。

 

我目前的工作是網站的前端工程師,簡單來說就是把行銷、美術所設計的畫面、功能製作出來,這部份我原先的知是都是來自於我在IND的自己摸索,當然還有課堂上的學習(感謝馬尚彬教授的指導,並給我更多練習的機會)

 

建立一個網站有許多技術需要結合,期中網站前端顯示的部分那就更多樣化了

目前我是使用PHP+CSS+JS(jQuery) 為主要開發語言,在這裡推薦一個很好用的教學網站

http://www.codecademy.com/

這是一個英文網站,它提供了六七種常見的網頁開發與研教學,對於一個初學者或是有點基礎但是要快速了解新語言的好網站

 

它是使用漸進式 透過大量的練習問題來達到教學目的

另外在寫作的過程中它會即時把結果顯示在瀏覽器上

這就是它最棒的地方

 

Post to Twitter Post to Plurk Post to Facebook Send Gmail

MYSQL 密碼加密(透過PHP)

最近我的第一個自製PHP網站 被攻打下來了阿….

雖然不太清楚原因

 

所以最近找了個方法 把MYSQL 中所有的密碼通通加密了,這樣應該會安全些

 

參考資料

http://www.hkcode.com/programming/242

http://result945.pixnet.net/blog/post/27077947-mysql-密碼使用md5加密

 

加密方法是 透過 md5() 這個語法來完成,剛剛測試,上面兩種方法加密結果是相同的

 

我使用的方法是

在密碼 $passwd 放入SQL 之前 寫下

$passwd=md5($passwd);

 

如果 資料庫原先是明碼存的,可以透過 update `XXX` SET `passwd`=md5(passwd) where 1 來解決

不過在轉碼之前請先備份,還有確保密碼長度 超過32字元

 

 

Post to Twitter Post to Plurk Post to Facebook Send Gmail

驗證碼的製作

本次教學 要感謝許多人的幫助

感謝 kidpen 及其作者 提供了最原始的code

感謝 orinx.chen 學弟教我如何使用這個code

感謝 http://jax-work-archive.blogspot.com/2007/11/php.html 提供完整的教學

感謝 魏藥 同學 一直被我叫出來解決GD 程式庫的問題(沒辦法 這台server 他負責XD)

 

另外 kipen 是使用 MIT 授權

而本人是使用 GPL v3授權

使用本code 的網友們  請保留我們的版權宣告,並請遵守 GPLv3 的規範,謝謝

 

驗證碼是使用 PHP 自動生成一塊圖片,這部分會使用到GD 程式庫,請自行安裝

http://www.arthurtoday.com/2010/03/ubuntu-php-gd-library.html

 

本次我製作的 驗證碼 是 顯示 中文數字,要求使用者輸入 阿拉伯數字的雙重驗證

 


 *
 * This file incorporates work covered by the following copyright and
 * permission notice:
 *
 *Copyright (c) 2011 Chen-Heng Chang
 *
 *Permission is hereby granted, free of charge, to any person obtaining a copy
 *of this software and associated documentation files (the "Software"),
 * to deal in the Software without restriction, including without limitation the rights
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the
 * Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
 *
 *The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
 *
 *THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT
 *LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
 *TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 */
	/*
	這是一個驗證碼產生器
	*/
	session_start(); //開啟 seesion 功能
	$long=5;//驗證碼長度
	mt_srand((double)microtime()*1000000);
	$code = '';
	$possible = '0123456789'; //放入阿拉伯數字
	$possibleLen=strlen($possible);
	$chinese=array('零','壹','貳','參','肆','伍','陸','柒','捌','玖');//相對應的 中文數字
	$show='';
	for($i=0; $i< $long; $i++){//產生驗證碼
		$code .=$possible[rand(0,$possibleLen-1)];
	}
	$_SESSION['code'] = $code; //存入資料,之後要使用 就用這個SESSION
	for($i=0; $i< $long; $i++)//轉換成中文字
	{
		$show.=$chinese[$code[$i]];
	}
	$width=$long * 20+20;
	$height=30;
	$image = imagecreate($width, $height) or die('GD image creating error.');//產生一塊圖
	$background_color = imagecolorallocate($image, 239, 239, 239); //設定底色
	$text_color = imagecolorallocate($image, 0, 169, 225);//設定文字顏色
	$noise_color = imagecolorallocate($image, 200, 200, 200);//設定雜訊顏色
	imagefill($image,0,0,$background_color);
	imagettftext($image,15,0,10,20,$text_color,'/home/pupuliao/web/code/kaiu.ttf',$show);
	/*
imagettftext (int im, int size, int angle, int x, int y, int col, string fontfile, string text)
im 圖片物件 size 文字大小 angle 0度將會由左到右讀取文字,而更高的值表示逆時鐘旋轉
x y 文字起始座標 col 顏色物件 fontfile 字形路徑,為主機實體目錄的絕對路徑,
可自行設定想要的字型 text 寫入的文字字串
*/
	for ($i=0; $i<($width*$height)/250; $i++) {//產生雜訊
		imageline($image, mt_rand(0,$width), mt_rand(0,$height), mt_rand(0,$width), mt_rand(0,$height), $noise_color);
	}
	  header("Content-Disposition:filename=image_code.png");
	header("Content-type:image/png");
	imagepng($image);
	imagedestroy($image);
	exit;
?>

 

 

這隻程式碼有一點要注意的地方在 字體

  imagettftext($image,15,0,10,20,$text_color,'/home/pupuliao/web/code/kaiu.ttf',$show);

這部分 要引用一個可以使用中文的字體,本次範例我是使用電腦中的 標楷體

 

這是實際產生出來的結果

 

如果驗證碼 的php 檔案名稱為 image.php

那我在 表單中 只需要加入

<input type="text" name="code" /><img src="image.php">

即可

 

在後端只需要檢查 $_SESSION[‘code’] 和送出的值是否相同即可

 

DEMO

Post to Twitter Post to Plurk Post to Facebook Send Gmail

在wordPress中放php

最近我又因為一些案子,研究如何在 wordpress中放php code

所以找了一下 網路上的文章

就開始嘗試使用

 

外掛名稱:shortcode-exec-php

 

1. 安裝好後 在工具的地方看到同名的選項

 

2.進去後會看到設定選單…..基本上我都沒有用過,應該不難懂,前四個是說 哪些地方可以使用php

3. 再來就是寫code 的地方,hello_world是名稱,寫好後 可以test 測試 和 save 存檔,在要使用的地方 就把[名稱]放進去,就可以了

經過測試,不同組的code 參數不能共用

可以用include

輸出都用echo

 

 

另外 聲明

用這種方式有漏洞問題,請自行評估

Post to Twitter Post to Plurk Post to Facebook Send Gmail

ckeditor設定教學

以下文章 參考至http://www.wretch.cc/blog/hunterxkura/10879375

會看這一篇的人,相信都很清楚,ckeditor的功用,及他的方便之處

然而當你要做細部設定呢?

像是你不想讓某些按鈕出來呢?

你要怎麼設定

我找到了這篇文章,說明還滿詳細的

閱讀全文

Post to Twitter Post to Plurk Post to Facebook Send Gmail

在PHP下做IP偵測及分析過濾

在本文一開始 ,要先來個免責聲明: 本內容是我在替學校做報修系統時,從多個網站學習組合而來,理論上可行,是否會被攻破不知~~~

 

今天我替學校做的報修系統,遭人閒閒沒事丟資料進去,為了避免以後的麻煩,就加上了 IP 過濾的功能,雖然這個項目是本來就預定要有的,但是是在所有測試都OK後才以 apache 的設定上 過濾。

程式碼 我是參考一些別人寫的code 加以改寫後 以functuon 的方式處理

抓取IP資訊,這似乎增加了 如果用proxy 仍可抓取正確IP

function getIP()
    {
        if (!empty($_SERVER[‘HTTP_CLIENT_IP’]))
    return $_SERVER[‘HTTP_CLIENT_IP’];
        else if (!empty($_SERVER[‘HTTP_X_FORWARDED_FOR’]))
    return $_SERVER[‘HTTP_X_FORWARDED_FOR’];
        else
    return $_SERVER[‘REMOTE_ADDR’];
    }

再來是簡單的 IP 分析,取得IP後 分割成四份,這只是簡單的方法,如果有必要可以做出 白名單 黑名單的方式,不過我不需要,以後再說

function checkIP()
    {
        $IP=getIP();
        list($ip1, $ip2, $ip3,$ip4) = sscanf($IP,"%d.%d.%d.%d");
        if($ip1==xxx && $ip2==yyy) return true; //這裡放分析條件
        else return false;
    }

 

之後再要做IP 分析的地方加入

    if(checkIP()==false)
    {
        header('Location: falseIP.php');
    exit;
    }

讓只要是不允許的IP 通通倒到另一個頁面

 

最後說明一下

我們都知道 apache 可以做IP 過濾的功能,但是如果是只針對特定頁面的話,不易設定,而且如果是租用的server 有時無法做設定,所以還是需要用PHP做分析

Post to Twitter Post to Plurk Post to Facebook Send Gmail

給瀏覽器用的HTML編輯器-ckeditor(安裝篇)

會寫網站的人,應該都知道HTML吧,當然也有人看不懂也照樣做網站,畢竟現在很多軟體都有視覺化的處理方式,就算不懂HTML 也可以做出一個不錯的網頁。

但是,當你是要做一個論壇(這應該不會有人要自己刻了)、一個留言板、甚至是一個回函系統,有很多狀況是要使用者在網頁上自己編寫,方法大家都知道,用一個<form>,裡面再包一個<textarea> 恩 搞定,但是….如果不懂HTML,就算是後製處理,可能只能幫他換行,難道要教使用者如何使用HTML嗎?不可能嘛,所以就是要使用給瀏覽器用的HTML編輯器,而我常用的就是這套"ckeditor"

他是用種 利用javascript 實作出,平常我們網頁編輯軟體的"設計"模式,相當方便

 

閱讀全文

Post to Twitter Post to Plurk Post to Facebook Send Gmail

  • Page 1 of 2
  • 1
  • 2
  • >

Copyright © 2024. All Rights Reserved.

歡迎光臨
初音