【PHP程式設計+MySQL資料庫+PHPMaker整合教學+技術諮詢】 本月特價優惠中! 動態的架站程式時代,要自訂PHP程式頁面有那麼難嗎? MySQL『資料庫』與『資料表』,用PHP程式有那麼難控制嗎? 你不用死背『PHP程式』與『MySQL資料庫』語法也能獨自設計完成! 這是自動化軟體程式的年代 (用PHPMaker 設計在彈指之間就能自動生成整個 PHP 程式系統) 這不是:神話!程式軟體模組取代了這一切複雜的工程。 你可以自己建構自己專屬的: 訂購表單、會員名單、擴增購物車特殊頁面 →POS 系統、CRM 系統、ERP 系統、HRM 系統...等等 (更可以加入數據資源銷售賺錢!) 該是:【見證奇蹟】的時候了! 非親眼所見....真的無法相信此神兵利器!

《 NuSphere PhpED 7.0.7019專業版》

PhpED 通過無與倫比的PHP除錯和壓縮能力,以及一個新的NuSOAP web服務精靈成為了PHP領功能變數的領軍產品。
更加強大的Project Manager使得發佈站台和應用程式比以前更加容易。
現在可以線上程層級對正在運行或是開發中的程式進行測試和調校。
而且,對PostgreSQL和 MySQL資料庫的本地支援為PHP使用開源資料庫提供了一個廣泛的環境。

安裝說明:

運行 NuSphere-phped-5.9.5-Win32.exe 安裝其中安裝選項按照個人習慣自己修改

給phped加上代碼格式化功能

1.下載phpcb http://www.waterproof.fr/products/phpCodeBeautifier/

2.解壓縮後把phpcb.exe 放到phped的安裝目錄
3.開啟phped Tools->Settings
找到 Integration 選取後在右側點擊 AddMenu 再出來的視窗中隨便輸入你想叫的名稱 例如FormatCode
4.選取剛加入的選單 右側點擊 Edit 在參數的視窗中按照如下配置即可

Execute with : shell

Command line : "C:Program FilesNuSpherePhpEDphpcB.exe" –equal-align-position 50 –padding-char-count 4 –space-after-if –space-after-switch –space-after-while –glue-amperscore –force-large-php-code-tag –align-equal-statements –comment-rendering-style PEAR –extra-padding-for-case-statement –glue-arrow –optimize-eol –one-true-brace –one-true-brace-function-declaration "@FName@"

其中C:Program FilesNuSpherePhpED 換成你的phped的安裝路徑

Shortcut : 這個是執行的快捷鍵 我自己設定的是 Alt+F

在視窗下面的Options 選項中 選取如下兩項
Work with editor
Return results to editor
點擊close關閉視窗儲存

————————————————————–
NuSphere PhpEd is today's top integrated development environment for php. Suitable both for small individual works and large multi-developer projects, PhpED considerably boost up the development process. PhpED is a robust tool featuring full-cycle functionality for developing web-sites and web-applications. Balanced combination of advanced code editor, reliable dbg debugger, productive database connectivity client and fast and secure deployment abilities make PhpED a complete solution for most sophisticated developer needs. As in any complicated process, in php development a great deal of effectiveness depends on your choice of production tools. According to our customers, PhpED can save up to 75% of their development time.

PhpED is the leading PHP IDE with Advanced PHP Editor, PHP Debugger and PHP Profiler, Code Insight, Database Client, Integrated Help System, full support for JavaScript, HTML, CSS, XML, SMARTY, XHTML and other. The features available in PhpED bring you unmatched number of great PHP Tools

Advanced Editor

Full support for PHP versions from 4.2 to 5.3 in IDE and the Editor – from functions and local variables to namespaces and aliases
Dynamic Syntax Highlighting Flash Demo
The editor will automatically switch the syntax highlighting dependant on the position in the file. The strength of PHP is in ability to embed it in the other documents, like HTML. However, sometimes the document becomes too crowded with the lines of code from multiple languages. Auto-switch feature will let you focus on the code and the language that you are currently working on. It will only highlight those parts of the document, which are written in the same language as the current position of the cursor and deem the rest of the text. The editor will switch between php, html, smarty, css and javascript, depending on the type of the file.
Multiple Language Syntax Highlighting Flash Demo
Code sensitive syntax color highlighter gives you the ability to have separate highlighting for different languages in the same file. Highlighting for each language is of course fully configurable in PhpED's settings.
Auto Highlight variable
System highlights all occurrences of a variable in the Editor, when PHP variable is selected. Also highlighted are open/close HTML tags
Code Folding Flash Demo
Selectively hide and display sections of a currently-edited file. PHP IDE displays the collapsible regions of the code with folding marks. Works for PHP, HTML, JavaScript, CSS and other.
Support for all HTML standards – 3.2, 4.0, xhtml, 5.0
Fast search
Modal non-blocking search in background, starts from the top after full cycle. Fast Search shortcut
Diff viewer
Shows side by side difference between the file in the editor and local and remote copies

Debugging and Profiling Flash Demo

Commercial versions of PHP DBG Debugger – the most powerful debugger currently available provides unmatched debugging productivity and safety in both local and remote debugging modes. Learn more
PhpED advanced php profiler shows executing time for each line, function or module of the code with tenth millisecond's precision. You can locate all the bottlenecks quickly and efficiently. Profiler saves all the timings among multiple sessions so your can compare them and evaluate the improvements. Learn more
Triggering debugger on errors or exceptions. Learn more
Remote and local debuggin setup with easy to follow wizard

Code Insight Flash Demo

Code Completion. Dynamically provides the available properties and methods for a given variable or class, and automatically concludes partially typed keywords. Code completion works for JavaScript, HTML and CSS too. It shows properties for tags, classes and attributes. Flash Demo
Tool tips and Instant error analysis for Php, JavaScript, HTML and CSS make coding an easy task – no more simple mistakes and typos.
Full control over different versions – select which parser to use for any PHP version or HTML and CSS – including PHP 5.3, HTML5 and CSS3
Project-wide code explorer in PhpED IDE shows all php, javascript classes, methods, properties, functions and variables in every detail and facilitates object-oriented programming. Also supported: HTML and CSS.
Hints show you arguments and returning value for a just typed function, as well as a short description for them.
Fast functions reference shows you all the PHP functions as they are available from PHP extensions. Nested calls are supported with unlimited nesting level.
Code intelisense HTML Tags – IDE automatically adds closing bracket when you type in HTML tag
Auto Add HTML attributes – IDE automatically displays required attributes when the tag is entered
Code intelisense CSS – with support for CSS3 features
PHP, HTML, and CSS code Validator
PhpED's built-in code Validator checks out the syntax in PHP, HTML and CSS code and displays the error – both in the PHP editor and error bar. PHP IDE finds all errors that will cause problems during execution – e.g. missing semicolons, open brackets, missing quotes etc. HTML sections of the code are checked for unmatched tags and/or attributes, which are not supported in the corresponding version of HTML standard, missing re quired attributes, open quotes etc. Learn the details of the Code Validator here.
Find usage – Simple click to find all places where selected function, method or class are used in the Project.

Testing

Full integration with phpUnit
Easy to use UI to setup all options available in phpUnit configure.xml
In-Editor display of the tree of tests, with the ability to execute all or selected tests, navigation to source files and filtering of the display tests
Display, storage and export of the results to csv or excel.

Embedded browsers

See the pages gene
rated by your code in IE 8 and Firefox 4.0 with out leaving the IDE. You can also use any external browser of course

Even more Advanced Editor

Smarty Highlighter
PhpED comes with Syntax Highlighter for Smarty's .tpl files. This feature, combined with Dynamic Syntax Highlighting and Multiple Language Syntax Highlighting provides for unmatched convenience and productivity of PHP developers using Smarty templates in their work.
True Unicode editing. Create web pages in several natural languages simultaneously.
Code templates allow you to type whole code fragments at once by a single key press. You can add new templates and change existing ones.
Fully customizable shortcuts, advanced editor features such as brace matching, context-sensitive auto-indent and smart-home speed up your work significantly.
Search and replace scope. Now find and replace works in multiple files and directories as well as in all opened files! Regular expressions allow you to find text using complex conditions.
Drag-n-drop operations support. Try to drag an image from the file browser or project manager in to your HTML page directly. Database explorer supports drag operations too.

Project and File Management

Quick deployment. Once publishing is set up according to your needs, you can upload your PHP projects with a single click!
Project-wide code explorer in PhpED IDE shows all php classes, methods, properties, functions and variables in every detail and facilitates object-oriented programming.
Secure deployment. Support for SFTP, FTPS (TLS/SSL) and WebDAV/HTTPS (SSL) protocols make deployment and data transfer secure now
Fast deployment of remote project on local networks. Support of Windows Share (Samba)
Enhanced integration. Integrate PhpED IDE with 3rd party tools like Tortoise SVN or Tortoise CVS.
Terminal connections (Telnet and SSH) are supported. Perform your remote administration tasks from within PhpED
Embedded tools for more effective coding, editing and code management. PhpED IDE includes a number of pre-configured tools like PHP documentor, HTML Tidy, Code Formatter, Html Validator and CVS client.

Database client

SQLite, MySQL, MSSQL, Oracle, PostgreSQL and InterBase support. Quick access to multiple types of databases through a GUI tool boosts up your productivity. Browse the tables, drag and drop fields, tables names, views, stored procedures, triggers etc. and run any sql statement to manipulate the data and the metadata stored in the database – all without leaving the IDE.
NuSoap wizard and NuSoap connection client let you easily enhance your code with WDSL services. Drag-n-drop is fully supported Flash Demo

Refactoring of PHP code

Extract any selected block of code into a method or function
Rename and identifier – variable, function, class or method and the system will update all usages of that identifier in the project
Side by side differences display of before and after refactoring operation

Integrated help system

Embedded manuals. PhpED is delivered with several most needed manuals, including manuals and references for php, css2, html4.01, html3.2, mysql, postgresql, smarty and others. You can customize the list of manuals adding other resources you may need for your work.
Context help for Php, HTML and CSS. Pressing F1 invokes context sensitive help for the code under cursor (php functions, html tags and attribute and css classes).

Supported platforms for NuSphere PhpED:

Windows 2000 (sp5 or higher), 2003, 2008, XP, Vista, Windows7

《 NuSphere PhpED 7.0.7019專業版》官方網站:
http://www.nusphere.com/

當magic_quotes_gpc=off

Pstzine0x03裡”[0x06] 高級PHP代碼審核技術”一文中關於 “5.3.6 變數key與魔術引號” 部分的php原始程式碼分析

author: ryat#www.wolvez.org
team:http://www.80vul.com
date:2009-04-10

一、綜述

magic_quotes_gpc是php中的一個安全選項,在php manual中對此有如下描述:

When on, all ‘ (single-quote), ” (double quote), (backslash) and NULL characters are escaped with a backslash automatically. This is identical to what addslashes() does

雖然magic_quotes_gpc有助於提升程式的安全性並且在php中默認開啟,但同時也帶來了其他的一些問題,因此在php6中將去掉此選項。

二、當magic_quotes_gpc=off

考慮到部分伺服器關閉了magic_quotes_gpc或者其他的一些原因[如影響功能等],很多程式在如magic_quotes_gpc=off下自己實現一個代碼來類比magic_quotes_gpc=on的情況. 如下面的一段代碼:

define(‘MAGIC_QUOTES_GPC’, get_magic_quotes_gpc());

foreach(array(‘_COOKIE’, ‘_POST’, ‘_GET’) as $_request) {

foreach($$_request as $_key => $_value) {

$_key{0} != ‘_’ && $$_key = daddslashes($_value);

}

}

function daddslashes($string, $force = 0) {

!defined(‘MAGIC_QUOTES_GPC’) && define(‘MAGIC_QUOTES_GPC’, get_magic_quotes_gpc());

if(!MAGIC_QUOTES_GPC || $force) {

if(is_array($string)) {

foreach($string as $key => $val) {

$string[$key] = daddslashes($val, $force);

}

} else {

$string = addslashes($string);

}

}

return $string;

}

利用addslashes()函數類比了magic_quotes_gpc=on時的效果,看上去很完美,其實是有缺陷的或者說只是類比了magic_quotes_gpc的部分功能.

三、magic_quotes_gpc的代碼分析

php在註冊$_GET/$_POST等超全域變數時magic_quotes_gpc部分的代碼:

// php_variables.c

PHPAPI void php_register_variable_safe(char *var, char *strval, int str_len, zval *track_vars_array TSRMLS_DC)

{

// 對變數值的處理

if (PG(magic_quotes_gpc)) {

Z_STRVAL(new_entry) = php_addslashes(strval, Z_STRLEN(new_entry), &Z_STRLEN(new_entry), 0 TSRMLS_CC);

} else {

Z_STRVAL(new_entry) = estrndup(strval, Z_STRLEN(new_entry));

}

PHPAPI void php_register_variable_ex(char *var_name, zval *val, zval *track_vars_array TSRMLS_DC)

{

// 對變數名的處理

zend_bool is_array = 0;

for (p = var; *p; p++) {

if (*p == ‘ ‘ || *p == ‘.’) {

*p=’_’;

} else if (*p == ‘[‘) {

is_array = 1;

ip = p;

*p = 0;

break;

}

}

var_len = p – var;

// 上面這段代碼沒有考慮變數名的原始長度,所以這裡是not binary safe

// 也就是說,提交 test.php?ryat%00wst=1 將會生成$_GET[‘ryat’]=1

if (is_array) {

// 如果變數名是陣列的形式

} else {

// php > 5.2.1

if (PG(magic_quotes_gpc)) {

// php = 4.x && php <= 5.2.1

// if (PG(magic_quotes_gpc) && (index!=var)) {

escaped_index = php_addslashes(index, index_len, &index_len, 0 TSRMLS_CC);

} else {

escaped_index = index;

}

} else {

// 這部分的magic_quotes_gpc處理和上面一樣

由上面的代碼可以看到,magic_quotes_gpc=on時不僅僅用addslashes處理了變數值,而且處理了變數名[既$_GET/$_POST等超全域變數的key,另外要注意的是:[1]在php4和php<5.2.1的版本中,不處理第一維的key:)]

而前面那段模擬magic_quotes_gpc的代碼僅僅處理了陣列的值,因此是存在安全隱患的。

四、實例[ECShop SQL injection 漏洞分析]

文件includes/init.php判斷get_magic_quotes_gpc(),如果為off則調用addslashes_deep():

// includes/init.php

if (!get_magic_quotes_gpc())

{

if (!empty($_GET))

{

$_GET = addslashes_deep($_GET);

}

if (!empty($_POST))

{

$_POST = addslashes_deep($_POST);

}

$_COOKIE = addslashes_deep($_COOKIE);

$_REQUEST = addslashes_deep($_REQUEST);

}

addslashes_deep()在文件includes/lib_base.php裡最後通過addslashes()處理

// includes/lib_base.php

function addslashes_deep($value)

{

if (empty($value))

{

return $value;

}

else

{

return is_array($value) ? array_map(‘addslashes_deep’, $value) : addslashes($value);

// 只處理了陣列的值:)

}

}

下面看下具體的導致漏洞的代碼,文件 pick_out.php裡:

// pick_out.php

if (!empty($_GET[‘attr’]))

{

foreach($_GET[‘attr’] as $key => $value)

{

$key = intval($key);

$_GET[‘attr’][$key] = htmlspecialchars($value);

// foreach處理的是指定陣列的拷貝,所以這裡的處理並不影響陣列原先的key和value

// 因此可以引入任意的key:)

// 程式師的邏輯出了問題?

}

}

foreach ($_GET[‘attr’] AS $key => $value)

{

$attr_url .= ‘&attr[‘ . $key . ‘]=’ . $value;

$attr_picks[] = $key;

if ($i > 0)

{

if (empty($goods_result))

{

break;

}

// 利用key進行注射:)

$goods_result = $db->getCol(“SELECT goods_id FROM ” . $ecs->table(“goods_attr”) . ” WHERE goods_id IN (” . implode(‘,’ , $goods_result) . “) AND attr_id=’$key’ AND attr_value=’$value'”);

由於magic_quotes_gpc=off時沒有對$key處理,同時在陣列賦值時存在邏輯問題,最終導致了注射漏洞:)

EXP:

http://www.80vul.com/exp/ecshop-pch-005.txt

五、參考:

http://bugs.php.net/bug.php?id=41093

PHP程式設計問題諮詢:
請問,如何計算現用的線上人數?

———————————————————
PHP程式設計問題回覆:
您要計算現用的線上人數?,可以參考以下的說明:

———————————————————
計算現用的線上人數

例子一:用文字實現
<?php
//首先你要有讀寫檔的許可權
//本程式可以直接運行,第一次報錯,以後就可以
  $online_log = "count.dat"; //儲存人數的檔,
  $timeout = 30;//30秒內沒動作者,認為掉線
  $entries = file($online_log);

  $temp = array();
 
  for ($i=0;$i<count($entries);$i++) {
   $entry = explode(",",trim($entries[$i]));
   if (($entry[0] != getenv('REMOTE_ADDR')) && ($entry[1] > time())) {
    array_push($temp,$entry[0].",".$entry[1]."
"); //取出其他流覽者的資訊,並去掉逾時者,儲存進$temp
   }
  }

   array_push($temp,getenv('REMOTE_ADDR').",".(time() + ($timeout))."
"); //更新流覽者的時間
  $users_online = count($temp); //計算線上人數

  $entries = implode("",$temp);
  //寫入檔案
  $fp = fopen($online_log,"w");
   flock($fp,LOCK_EX); //flock() 不能在NFS以及其他的一些網路檔系統中標準工作
   fputs($fp,$entries);
   flock($fp,LOCK_UN);
   fclose($fp);

   echo "現用的有".$users_online."人線上";

?>  
例子二:
用資料庫實現線上使用者

<?
#
# Author: Marco(hkfuk)
#
# Contact: Crazy_Marco@msn.com
#
$host="localhost";//mysql的host
$user="root";//mysql的使用者名稱
$pw="";//mysql的密碼
$db="";//mysql資料庫名稱
$update_time="30";//更新的頻率—秒數
session_start();
if(!$_SESSION['name'])session_register("name");
############################################
$con=mysql_connect($host,$user,$pw)or die("不可以連線資料庫");
$now=time();
mysql_select_db($db,$con)or die("錯誤的資料庫$db");
if(!empty($name)){//如果使用者已經登入了
$query=mysql_query("select count(username) from online_list where username='$name'",$con);//查詢線上到表是否已經有使用者的名稱
$result=mysql_result($query,0);//查詢的結果
if($result!=0){//如果使用者已經在線上清單了
@mysql_query("update online_list set second_time='$now' where username='$name'",$con);//更新使用者的最後線上時間
}else{//如果使用者已經不在線上清單
@mysql_query("insert into online_list(username,userip,online_time,second_time)values('$name','$REMOTE_ADDR','$now','$now')",$con);// 新增一個使用者到線上清單
}
}

else{//如果使用者沒有登入
$query=mysql_query("select count(userip) from online_list where userip='$REMOTE_ADDR'",$con);//查詢線上到表是否已經有訪客的ip 位址
$result=mysql_result($query,0);//查詢的結果
if($result!=0){//如果訪客的ip位址已經在線上清單了
@mysql_query("update online_list set second_time='$now' where userip='$REMOTE_ADDR'",$con);//更新訪客的最後線上時間
}else{//如果使用者清單沒有訪客的ip位址
@mysql_query("insert into online_list(username,userip,online_time,second_time)values('訪客 ','$REMOTE_ADDR','$now','$now')",$con);//新增一個訪客到線上清單
}
}
$del_time=$now-$update_time;
@mysql_query("delete from online_list where second_time<$del_time",$con);//刪除在$update_time秒內沒有動作的使用者
?>

———————————————————

您想要使用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));
}
—————————————————–

導航貓 Navicat for MySQL Enterprise Edition.v9.0.14 繁體中文版

Navicat MySQL 是一套強大的 MySQL 資料庫伺服器管理及開發工具。
它可以用於在任何 3.21 或以上的 MySQL 版本,並支援最新版 MySQL 的大部份功能,
包括觸發器、預存程序、函式、事件、檢視、管理使用者等等。
它不只適用於資深的專業開發人員,對於新手也相當容易上手。
透過它極具巧思的圖形化使用者介面 (GUI),Navicat MySQL 讓你可以快速且容易的以安全且簡單的方法建立、組織、存取及共享資訊。



軟體介紹:

最新的 MySQL 版本支援

Navicat MySQL – 一個強大的 MySQL Database Server 管理及開發工具。
最主要支援的功能:
    * 支援 MySQL 3.21 或以上的版本
    * 支援萬國碼 (Unicode) / 字元集
    * 支援 MySQL 的事件、檢視及預存程式的建立
    * 支援觸發器
    * 支援外鍵

額外的連線選項

    * 支援 SSH 通道
      透過 Navicat 的 SSH 通道建立一個安全的 SSH 階段連線。兩個主機間可享用一個牢固的驗證及安全加密通訊。
    * 支援 HTTP 通道
      當你的 ISP 不允許直接連線到他們的 MySQL server 但允許建立 HTTP 連線時,Navicat 可以提供你使用 HTTP 穿隧 (Tunneling) 功能。HTTP 穿隧 (Tunneling) 使用與網站伺服器相同協定 (http://) 及相同連接埠 (port 80) 以連接到一個 MySQL server。
    * 提供 MySQL server 自動重新連線
      使用這個選項「愈時重新連線」,它會透過偵測 (ping) 來保持與這個伺服器的連線。
    * 透過 Navicat MySQL 匯出登錄資料 (.reg)
      當 Navicat 從一部電腦遷移到另一部新的機器時,你可以簡單的傳輸你的連線設定。只需要簡單的透過 Navicat 匯出登錄資料並在這部新的機器回存即可。

即時的資料庫導覽

    * 一旦連線即立即開啟資料庫為顯示狀態
      連線後馬上開啟你偏好的資料庫。更有效的簡省你的時間及工作!

無所不包的 MySQL 物件管理

    * 建立、編輯及刪除資料表的欄位、索引、外鍵及觸發器
      使用資料表設計 – 一個基本用來操作資料表的 Navicat MySQL 工具,你可以建立、編輯及刪除資料表的欄位、索引、外鍵及其他。
    * 傾印物件定義成為一個 sql 檔案
      簡單的將物件定義及資料傾印成 sql 檔案來備份。
    * 列印資料庫 / 資料表結構
      列印資料庫 / 資料表定義以呈現它們在 Navicat 中的結構。一眼即可完整瞭解各別物件的結構。

多樣化的匯入及匯出能力

    * 從 ODBC 匯入資料
      你可以在設定好一個資料來源連線後從 ODBC 匯入資料。如果連線成功,所有可用的資料表會包含在內。只需要簡單的選擇你要匯入的資料表或使用加入查詢按鈕指定一個查詢。
    * 從超過 18 種常見格式匯入資料,包括 MS Access, MS Excel, XML, PDF 及 TXT
      匯入精靈可以讓你從各種格式匯入資料到一個資料表。除此之外,你可以儲存你的設定成一個匯入設定檔供設定排程使用。
    * 匯出資料到 MS Access, MS Excel, MS Word, HTML, PDF, TXT, CSV, DBF, XML, 等
      同樣地,匯出精靈可以讓你匯出資料到各種格式。儲存你的設定成一個匯出設定檔供設定排程使用。
    * 匯出資料並建立記錄成 sql 檔案的 INSERT 陳述式
      在資料傳輸期間,你可以選擇以記錄選項匯出資料成 sql 檔案,如完整的 insert 陳述式 / 協議 insert 陳述式等。

強大的資料操作工具

    * 表單檢視
      以表單檢視操作目前的記錄。享受更簡潔顯示的欄位名稱及它的值,能更聚焦在目前的記錄上。
    * 支援外鍵資料選擇
      使用這個圖形介面工具 – 外鍵資料選擇,你可以從參考的資料表中找到外鍵的值。停止並切換檢視到一個主資料表以尋找可用的外鍵值!
    * 資料及結構同步
      Navicat for MySQL 可以讓你從一個 MySQL 資料庫以詳細分析程式傳輸資料到另一個。同樣的,你可以比對並修改這個資料表結構。在資料及結構同步上,目標資料庫可以與來源資料庫相同,也可以是其他的 MySQL server。
    * 支援本地 / 遠端 MySQL 資料庫資料傳輸
      從一個 MySQL 資料庫傳輸資料表/檢視/預存程式/事件到另一個 MySQL 資料庫,或成為一個純文字檔案。
    * 支援備份及回存 MySQL 資料庫
      經常性的備份資料庫對使用者是相當重要的。使用 Navicat 備份/回存你的 MySQL 所有資料表及記錄、檢視、預存程式及事件。你也可以在資料庫間排程備份。
    * 建立排程備份、匯入 / 匯出、資料傳輸、儲存查詢及資料同步
      建立一個設定的排程批次工作以執行一或多個定期的、指定開始及結束的日期及時間。批次工作可以建立的對象包括查詢、報表列印、備份、資料傳輸、資料同步、匯入及匯出。
    * 傳送排定工作的電子郵件通知
      產生通知電子郵件給你指定的收件人,讓他們取得最新排程的資訊。透過你在排程中回傳結果的電子郵件帳號來直接讀取。

強大的安全性管理

    * 視覺化的使用者管理
      Navicat 提供一個視覺化的工具來管理使用者。你可以輕鬆的加入、複製、刪除使用者,並編輯通用使用者權限、從選取的資料庫、資料表 / 檢視、欄位及預存程式 / 函式取得權限。

具設計巧思的視覺化產生器 / 編輯器

    * 視覺化查詢 / 檢視產生器
      視覺化查詢 / 檢視產生器 – 分為兩個部份:上面的圖形檢視,及底下的語法檢視,讓你可以視覺化的建立並編輯查詢 / 檢視而不需具備 SQL 知識。
    * 查詢編輯器
 &

nb
sp;    它可以讓你建立並編輯一個查詢的 SQL 文字、準備及執行選取的查詢。
    * 支援參數查詢
      設定查詢參數在每次執行時加入變數值到一個查詢。
    * 查詢、檢視及事件自動完碼
      在查詢編輯器、檢視及事件中使用最新自動完碼功能,體驗一個快速建構 SQL 條件式的方法。當你要選擇可用的資料庫物件內容或 SQL 關鍵字,你所要做的只需從下拉式清單中選取。

容易使用的報表產生器(僅包含於 Enterprise 版本)

    * 以視覺化產生器建立報表
      使用我們反善介面的圖形化報表產生器建立不同類型的報表。設計包括發票、統計、郵遞標籤及其他等。
    * 匯出報表成為多種格式,PDF, Excel, HTML 等
      享受更多的報表輸出格式 – text, pdf, Lotus, Excel, Graphic, Html 及其他。請在 Navicat Enterprise 版本中瞭解報表產生器的這些功能。
    * 與其他使用報表檢視器者檢視及共享報表
      Navicat 報表檢視器可以讓你導覽由 Navicat MySQL 報表產生器產生的報表。與它最接近的事就是你可以與未安裝 Navicat 但有安裝 Navicat 報表檢視器的人共享報表。

更多的強大功能

    * 虛擬群組
      一個在 Navicat 中更好的組織物件的方法。你可以使用這個虛擬群組功能將物件組織成群組。虛擬群組可以套用在連線、資料表、檢視預存程式、事件、查詢、報表、備份及排程中。
    * 伺服器監控
      在伺服器監控視窗中勾選你要監控的伺服器的核取鈕。可以點選程式清單、變數或狀態頁籤以顯示及/或修改 MySQL servers 的內容。
    * SQL 中控台
      要使用命令列介面,你可以在 Navicat 中開啟 SQL 中控台。它提供你可以與文字基礎的畫面互動從資料庫輸入查詢及輸出結果。
    * 停駐
      你可以自訂你的視窗行為樣式為停駐視窗或浮動視窗。選擇停駐已開啟的視窗到主視窗或停駐視窗,或繼承上個停駐樣式。

導航貓 Navicat for MySQL Enterprise Edition.v9.0.14 繁體中文版官方下載網址:

http://download.navicat.com/download/navicat9_premium_ct.exe

問題:
請問在PHP網頁出現以下的錯誤:

Warning: session_start(): open(/tmpsess_7d190aa36b4c5ec13a5c1649cc2da23f, O_RDWR) failed:….
這是什麼錯誤?

回覆:
因為你沒有指定session檔的存放路徑.

  解決方法:

(1)在c硬碟建立文件夾tmp

(2)打開php.ini,找到session.save_path,修改為session.save_path= "c:/tmp"

用單引號代替雙引號來包括字串,這樣做會更快一些。
因為PHP會在雙引號包圍的字串中搜尋變量,單引號則不會
注意:只有echo能這麼做,它是一種可以把多個字串當作參數的「函數」
(譯註:PHP手冊中說echo是語系結構,不是真正的函數,故把函數加上了雙引號)。

1.如果能將類的方法定義成static,就盡量定義成static,它的速度會提升將近4倍。

2.$row[』id』] 的速度是$row[id]的7倍。

3.echo 比 print 快,並且使用echo的多重參數
(譯註:指用逗號而不是句點)代替字串連線,比如echo $str1,$str2。

4.在執行for迴圈之前確定最大迴圈數,不要每迴圈一次都計算最大值,最好運用foreach代替。

5.註銷那些不用的變量尤其是大陣列,以便釋放記憶體。

6.盡量避免使用__get,__set,__autoload。

7.require_once()代價昂貴。

8.include檔案時盡量使用絕對路徑,因為它避免了PHP去include_path裡尋找檔案的速度,解析操作系統路徑所需的時間會更少。

9.如果你想知道腳本開始執行(譯註:即伺服器端收到用戶端請求)的時刻,使用$_SERVER[『REQUEST_TIME』]要好於time()。

10.函數代替正則表達式完成相同功能。

11.str_replace函數比preg_replace函數快,但strtr函數的效率是str_replace函數的四倍。

12.如果一個字串置換函數,可接受陣列或字元作為參數,並且參數長度不太長,那麼可以考慮額外寫一段置換代碼,使得每次傳遞參數是一個字元,而不是只寫一行代碼接受陣列作為查詢和置換的參數。

13.使用選取分支語句(譯註:即switch case)好於使用多個if,else if語句。

14.用@屏蔽錯誤訊息的做法非常低效,極其低效。

15.開啟apache的mod_deflate模組,可以提高網頁的瀏覽速度。

16.資料庫連線當使用完畢時應關掉,不要用長連線。

17.錯誤訊息代價昂貴。

18.在方法中遞增局部變量,速度是最快的。幾乎與在函數中呼叫局部變量的速度相當。

19.遞增一個全局變量要比遞增一個局部變量慢2倍。

20.遞增一個對像屬性(如:$this->prop++)要比遞增一個局部變量慢3倍。

21.遞增一個未預定義的局部變量要比遞增一個預定義的局部變量慢9至10倍。

22.僅定義一個局部變量而沒在函數中呼叫它,同樣會減慢速度(其程度相當於遞增一個局部變量)。PHP大概會檢檢視是否存在全局變量。

23.方法呼叫看來與類中定義的方法的數量無關,因為我(在測試方法之前和之後都)加入了10個方法,但效能上沒有變化。

24.派生類中的方法運行起來要快於在基類中定義的同樣的方法。

25.呼叫帶有一個參數的空函數,其花費的時間相當於執行7至8次的局部變量遞增操作。類似的方法呼叫所花費的時間接近於15次的局部變量遞增操作。

26.Apache解析一個PHP腳本的時間要比解析一個靜態HTML頁面慢2至10倍。盡量多用靜態HTML頁面,少用腳本。

27.除非腳本可以快取,否則每次呼叫時都會重新編譯一次。引入一套PHP快取機制通常可以提升25%至100%的效能,以免除編譯開銷。

28.盡量做快取,可使用memcached。memcached是一款高效能的記憶體對像快取系統,可用來加速動態Web應用程式,減輕資料庫負載。對操作碼 (OP code)的快取很有用,使得腳本不必為每個請求做重新編譯。

29.當操作字串並需要檢驗其長度是否滿足某種要求時,你想當然地會使用strlen()函數。此函數執行起來相當快,因為它不做任何計算,只返回在zval 結構(C的內建資料結構,用於存儲PHP變量)中存儲的已知字串長度。但是,由於strlen()是函數,多多少少會有些慢,因為函數呼叫會經由諸多步驟,如字母小寫化(譯註:指函數名小寫化,PHP不區分函數名大小寫).哈希尋找,會跟隨被呼叫的函數一起執行。在某些情況下,你可以使用isset() 技巧加速執行你的代碼。

(舉例如下)
if (strlen($foo) < 5) { echo 「Foo is too short」$$ }
(與下面的技巧做比較)
if (!isset($foo{5})) { echo 「Foo is too short」$$ }

呼叫isset()恰巧比strlen()快,因為與後者不同的是,isset()作為一種語系結構,意味著它的執行不需要函數尋找和字母小寫化。也就是說,實際上在檢驗字串長度的頂層代碼中你沒有花太多開銷。

34.當執行變量$i的遞增或遞減時,$i++會比++$i慢一些。這種差異是PHP特有的,並不適用於其他語系,所以請不要修改你的C或Java代碼並指望它們能立即變快,沒用的。++$i更快是因為它只需要3條指令(opcodes),$i++則需要4條指令。後置遞增實際上會產生一個臨時變量,這個臨時變量隨後被遞增。而前置遞增直接在原值上遞增。這是最改善處理的一種,正如Zend的PHP改善器所作的那樣。牢記這個改善處理不失為一個好主意,因為並不是所有的指令改善器都會做同樣的改善處理,並且存在大量沒有裝配指令改善器的際網路服務提供商(ISPs)和伺服器。

35.並不是事必面向對像(OOP),面向對像往往開銷很大,每個方法和對像呼叫都會消耗很多記憶體。

36.並非要用類實現所有的資料結構,陣列也很有用。

37.不要把方法細分得過多,仔細想想你真正打算重用的是哪些代碼?

38.當你需要時,你總能把代碼分解成方法。

39.盡量採用大量的PHP內建函數。

40.如果在代碼中存在大量耗時的函數,你可以考慮用C延伸的模式實現它們。

41.評估檢驗(profile)你的代碼。檢驗器會告訴你,代碼的哪些部分消耗了多少時間。Xdebug除錯器包括了檢驗程式,評估檢驗總體上可以顯示出代碼的瓶頸。

42.mod_zip可作為Apache模組,用來即時壓縮你的資料,並可讓資料傳輸量降低80%。

43.在可以用file_get_contents替代file.fopen.feof.fgets等系列方法的情況下,盡量用file_get_contents,因為他的效率高得多!但是要注意file_get_contents在開啟一個URL檔案時候的PHP版本問題;

44.盡量的少進行檔案操作,雖然PHP的檔案操作效率也不低的;

45.改善Select SQL語句,在可能的情況下盡量少的進行Insert.Update操作(在update上,我被惡批過);

46.盡可能的使用PHP內定函數(但是我卻為了找個PHP裡面不存在的函數,浪費了本可以寫出一個自訂函數的時間,經驗問題啊!);

47.迴圈內定不要聲明變量,尤其是大變量:對像(這好像不只是PHP裡面要注意的問題吧?);

48.多維陣列盡量不要迴圈嵌套賦值;

49.在可以用PHP內定字串操作函數的情況下,不要用正則表達式;

50.foreach效率更高,盡量用foreach代替while和for迴圈;

51.用單引號替代雙引號引用字串;

52.「用i+=1代替i=i+1。符合c/c++的習慣,效率還高」;

53.對global變量,應該用完就unset()掉;

[MySQL改善] — 如何使用SQL Profiler 效能分析器

mysql 的 sql 效能分析器主要用途是顯示 sql 執行的整個過程中各項資源的使用情況。分析器可以更好的展示出不良 SQL 的效能問題所在。
下面我們舉例介紹一下 MySQL SQL Profiler 的使用方法:

    * 首先,開啟 MySQL SQL Profiler

mysql> SELECT @@profiling;
+————-+
| @@profiling |
+————-+
| 0 |
+————-+
1 row in set (0.00 sec)
mysql> SET profiling = 1;
Query OK, 0 rows affected (0.00 sec)
mysql> SELECT @@profiling;
+————-+
| @@profiling |
+————-+
| 1 |
+————-+
1 row in set (0.00 sec)
預設情況下 profiling 的值為 0 表示 MySQL SQL Profiler 處於 OFF 狀態,開啟 SQL 效能分析器後 profiling 的值為 1.

    * 通過 sql 效能分析器,我們來對照一下 下列語句前後 2 次執行過程的差異,對我們瞭解 sql 的詳細執行過程是非常有說明的。

mysql> create table t_engines select * from t_engines1;
Query OK, 57344 rows affected (0.10 sec)
Records: 57344 Duplicates: 0 Warnings: 0
mysql> select count(*) from t_engines;
+———-+
| count(*) |
+———-+
| 57344 |
+———-+
1 row in set (0.00 sec)
mysql> select count(*) from t_engines;
+———-+
| count(*) |
+———-+
| 57344 |
+———-+
1 row in set (0.00 sec)
mysql> SHOW PROFILES;
+———-+————+————————————————-+
| Query_ID | Duration | Query |
+———-+————+————————————————-+
| 26 | 0.10213775 | create table t_engines select * from t_engines1 |
| 27 | 0.00032775 | select count(*) from t_engines |
| 28 | 0.00003850 | select count(*) from t_engines |
+———-+————+————————————————-+
15 rows in set (0.01 sec)
mysql> SHOW PROFILE FOR QUERY 27;
+——————————–+————+
| Status | Duration |
+——————————–+————+
| (initialization) | 0.00000425 |
| checking query cache for query | 0.00004050 |
| checking permissions | 0.00001050 |
| Opening tables | 0.00018250 |
| System lock | 0.00000450 |
| Table lock | 0.00001775 |
| init | 0.00001075 |
| optimizing | 0.00000550 |
| executing | 0.00002775 |
| end | 0.00000450 |
| query end | 0.00000325 |
| storing result in query cache | 0.00000400 |
| freeing items | 0.00000400 |
| closing tables | 0.00000500 |
| logging slow query | 0.00000300 |
+——————————–+————+
15 rows in set (0.00 sec)
mysql> SHOW PROFILE FOR QUERY 28;
+————————————-+————+
| Status | Duration |
+————————————-+————+
| (initialization) | 0.00000350 |
| checking query cache for query | 0.00000750 |
| checking privileges on cached query | 0.00000500 |
| checking permissions | 0.00000525 |
| sending cached result to client | 0.00001275 |
| logging slow query | 0.00000450 |
+————————————-+————+
6 rows in set (0.00 sec)
mysql> SELECT sum( FORMAT(DURATION, 6)) AS DURATION FROM INFORMATION_SCHEMA.PROFILING WHERE QUERY_ID =27 ORDER BY SEQ;
+———-+
| DURATION |
+———-+
| 0.000326 |
+———-+
1 row in set (0.00 sec)
mysql> SELECT sum( FORMAT(DURATION, 6)) AS DURATION FROM INFORMATION_SCHEMA.PROFILING WHERE QUERY_ID =28 ORDER BY SEQ;
+———-+
| DURATION |
+———-+
| 0.000039 |
+———-+
1 row in set (0.00 sec)
mysql>
從上面的例子中我們可以清晰的看出 2 次執行 count 語句的差別, SHOW PROFILE FOR QUERY 27 展現的是第一次 count 統計的執行過程,包括了 Opening tables 、 Table lock 等操作 。而 SHOW PROFILE FOR QUERY 28 展示了第二次 count 統計的執行過程 , 第二次 count 直接從查詢快取中返回 count 統計結果,通過對照 2 次統計的總執行時間發現,快取讀的速度接近物理讀的 10 倍。通過使用 SQL 效能分析器可以說明我們對一些比較難以確定效能問題的 SQL 進行診斷,找出問題根源。

     PHP星期幾取得代碼:

1 date("l");

2 //data就可以取得英文的星期比如Sunday

3 date("w");

4 //這個可以取得數字星期比如123,注意0是星期日

  取得中文星期幾:

1 $weekarray=array("日","一","二","三","四","五","六");

2 //先定義一個陣列

3 echo "星期".$weekarray[date("w")];

  取得指定日期是:

1 $weekarray=array("日","一","二","三","四","五","六");

2 echo "星期".$weekarray[date("w","2011-11-11")];

因為date函數非常強大,他完全可以勝任一切這樣的工作我附個手冊裡的表吧 方便隨時查閱

1 a – "am" 或是 "pm"

2 A – "AM" 或是 "PM"

3 d – 幾日,二位數字,若不足二位則前面補零; 如: "01" 至 "31"

4 D – 星期幾,三個英文字母; 如: "Fri"

5 F – 月份,英文全名; 如: "January"

6 h – 12 小時制的小時; 如: "01" 至 "12"

7 H – 24 小時制的小時; 如: "00" 至 "23"

8 g – 12 小時制的小時,不足二位不補零; 如: "1" 至 12"

9 G – 24 小時制的小時,不足二位不補零; 如: "0" 至 "23"

10 i – 分鐘; 如: "00" 至 "59"

11 j – 幾日,二位數字,若不足二位不補零; 如: "1" 至 "31"

12 l – 星期幾,英文全名; 如: "Friday"

13 m – 月份,二位數字,若不足二位則在前面補零; 如: "01" 至 "12"

14 n – 月份,二位數字,若不足二位則不補零; 如: "1" 至 "12"

15 M – 月份,三個英文字母; 如: "Jan"

16 s – 秒; 如: "00" 至 "59"

17 S – 字尾加英文序數,二個英文字母; 如: "th","nd"

18 t – 指定月份的天數; 如: "28" 至 "31"

19 U – 總秒數

20 w – 數字型的星期幾,如: "0" (星期日) 至 "6" (星期六)

21 Y – 年,四位數字; 如: "1999"

22 y – 年,二位數字; 如: "99"

23 z – 一年中的第幾天; 如: "0" 至 "365"

PHP程式編輯器 Blumentals Rapid PHP 2011 v11.2.0.129

一款優秀的PHP編輯器,它比傳統的PHP編輯環境功能更多,使用也更方便。
除了支持PHP外,它還可以用來編輯HTML, XHTML, CSS 以及 JavaScript 代碼。
內置的多種工具可以幫助用戶更好的驗證、重新利用、搜索自己的代碼。

快速的PHP編輯器是一個功能強大,快速和先進的的的PHP編輯器,遠遠超出普通的PHP編輯環境的要領。
方便的特點,使您可以即時建立和編輯不僅 PHP的,但也是HTML,XHTML,CSS和JavaScript代碼,
而整合工具,讓您可以輕鬆地除錯,驗證,重用,導航和格式化你的代碼。
無論你是專業開發人員或單純的愛好者,快速的PHP編輯器,你可以更快地完成工作,
節省時間和提高生產力。
快速的PHP編輯器是世界上唯一的PHP編輯器,內含全規模的HTML,CSS和JavaScript編輯器。現在你可以完成一個單一的工具。

主要特點和優點
– 速度 – 負載非常迅速
– 成熟的,完全可定制的和熟悉的文字編輯器
– PHP,HTML,CSS,JAVASCRIPT,WML,XML和SQL的語法高亮
– UTF- 8 Unicode支援的更多訊息
– 輕鬆瀏覽你的代碼與代碼瀏覽器的更多訊息
– 尋找PHP函數的參數與功能提示更多訊息
– 尋找函數,變量和屬性自動完成
– 除錯 PHP代碼,XDebug除錯器更多訊息。
– 驗證 PHP代碼語法檢查更多訊息
– 內建 Web伺服器,方便PHP的預覽
– 整合與 PHP,HTML和CSS文件
– 儲存和開啟檔案直接從 FTP更多訊息
– 項目管理和FTP發佈
– SQL資料庫連線(MySQL和PostgreSQL的,火鳥,Interbase的)更多訊息
– 符合括號高亮
– 支援正規表達式搜尋和置換
– 搜尋和置換檔案中的
– 拼字檢查文字的HTML代碼和TXT檔案
– 多項目剪貼簿
– 代碼片段庫的更多訊息
– 準備使用代碼範本
– 進階 HTML編輯自動完成,督察和其他工具
– 先進的CSS編輯與內建的CSS編輯器更多訊息
– 先進的JavaScript編輯更多訊息內建的JavaScript編輯器
– 無數的好東西(代碼折疊,線條突出,文字縮進

Rapid PHP editor is a powerful, quick and sophisticated PHP editor that extends far beyond the essentials of regular PHP editing environments.
Convenient features enable you to instantly create and edit not only PHP, but also HTML, XHTML, CSS and JavaScript code,
while integrated tools allow you to easily debug, validate, reuse, navigate and format your code.
Whether you are a professional developer or pure enthusiast, with Rapid PHP editor you can get your job done faster,
save time and increase productivity.
Rapid PHP Editor is the world's only PHP editor that includes full-scale HTML, CSS and JavaScript editors. Now you can accomplish more with a single tool.

Key Features and Benefits
– Speed – loads very quickly
– Sophisticated, fully customizable and familiar text editor
– Syntax highlighting for PHP, HTML, CSS, JavaScript, WML, XML and SQL
– UTF-8 Unicode Support More info
– Easily navigate your code with Code Explorer More info
– Lookup PHP function parameters with Function Hints More info
– Lookup functions, variables and properties with Auto Complete
– Debug PHP code with xDebug debugger More info
– Validate PHP code with Syntax Check More info
– Built-in web server for easy PHP preview
– Integration with PHP, HTML and CSS documentation
– Save and open files directly from FTP More info
– Project management and FTP publishing
– SQL database connectivity (MySQL, PostgreSQL, Firebird, Interbase) More info
– Matching bracket highlighting
– Search and Replace with Regular Expression Support
– Search and Replace in files
– Spell Checker for text in HTML code and TXT files
– Multi Item Clipboard
– Code snippet library More info
– Ready to use Code Templates
– Advanced HTML editing with Auto Complete, Inspector and other tools
– Advanced CSS editing with built-in CSS editor More info
– Advanced JavaScript editing with built-in JavaScript editor More info
– Countless goodies (code collapse, line highlighting, text indentation

PHP程式編輯器 Blumentals Rapid PHP 2011 v11.2.0.129版下載網址:

http://por.tw/Downloads/Rapid.PHP.2011.v11.2.exe

—————————————————————————

要如何在延伸裡呼叫PHP函數呢?在寫延伸的時候,肯定不能什麼功能都自己實現,原因有很多,開發效率、效能問題、維護成本等。

這就避免不了要在延伸裡呼叫PHP內核函數。

那麼如何在延伸裡面使用我們的內建函數呢?

PHP既然有函數,肯定提供了呼叫函數的介面,

這裡有兩個函數:

ZEND_API int call_user_function(HashTable *function_table, zval **object_pp, zval *function_name, zval *retval_ptr, zend_uint param_count, zval *params[] TSRMLS_DC);

ZEND_API int call_user_function_ex(HashTable *function_table, zval **object_pp, zval *function_name, zval **retval_ptr_ptr, zend_uint param_count, zval **params[], int no_separation, HashTable *symbol_table TSRMLS_DC);

很可惜,只找到聲明的地方,沒有找到註釋的地方,

從聲明來看,call_user_function 封裝了call_user_function_ex,

少了兩個傳參:

int no_separation:這個的用意就是是否對zval進行分離,不過此功能現在已經不用了,如果設為1則直接會出錯,分離的作用是為了改善空間。

symbol_table :是幹嗎用的,確實目前還不知道。

HashTable* function_table: 函數表,我們都知道 使用者函數也好,其他內建函數也好都會存在hashtable裡面,function_table會儲存所有內建函數和使用者函數,用CG來取得,因為函數表屬於是 編譯全局變量。

zval **object_pp:這個是用來我們呼叫類裡的某個方法的對象,看到這裡,你恍然大悟沒有,呼叫普通函數和呼叫類的方法是同一個,
function_table和object_pp只需要一個就可以了。

zval **retval_ptr_ptr:是函數的返回值。

zend_uint param_count:函數/方法 的參數個數

zval **params[] :函數/方法的參數指標。

那麼清楚了兩個API的參數及呼叫方法之後,我們來測試一下,究竟如何來使用。

因為項目需要,要將PHP中SESSION儲存部分資料,不過總有個過期不能處理,這兒介紹一下session的過期設定,如果設定了session過期無效,請看下後面的解決辦法:

在PHP中,設定php.ini,找到session.gc_maxlifetime = 1440 #(PHP5預設24分鐘)

這裡你可以隨便設定一下過期時間.但是有人說設定以後,好像不起作用!

其實不是不起作用,而是因為系統預設:

session.gc_probability = 1

session.gc_divisor = 1000

garbage collection 有個概率的,1/1000就是session 1000次才有一次被回收。

只要你的訪問量大了,那就能達到回收的效果.

要不然你也可以設定一下session.gc_divisor 的值,

例如:session.gc_divisor = 1,這樣就能明顯的看到SESSION過期的效果了!

使用php程式的五個小技巧

php程式的一些小技巧,這些比較基礎,總結一下(如果你是老鳥那就當成複習吧)。

1. str_replace

str_replace是非常常常常常用的php函數,用於字串置換,經常看到某些php新人為了置換一批字串,寫了好多行str_replace,實在是慘不忍睹。

比如這個例子:

$str = ‘某人的棲息地 — www.abc.net’;

$str = str_replace(‘某人’, ‘壞人’, $str);

$str = str_replace(‘的’, ‘di’, $str);

$str = str_replace(‘棲息地’, ‘豬窩窩’, $str);

$str = str_replace(‘www.abc.net’, ‘abc.net’, $str);

以上,置換了4次字串,實際只要換個寫法,一行就搞定了:

$str = ‘某人的棲息地 — www.abc.net’;

$str = str_replace(array(‘某人’, ‘的’, ‘棲息地’, ‘www.abc.net’), array(‘壞人’, ‘di’, ‘豬窩窩’, ‘abc.net’), $str);

 

2. array

經常看到有人拿陣列這樣寫:

echo $arr[some_key];

上面這行代碼能跑,看上去也沒什麼大問題,但是如果你把php.ini的error notice開啟的話,會收到一大批error。
php解析器首先是拿「some_key」當作一個常量來解釋的,但如果沒有定義some_key這樣一個常量,解析器還是很寬容的把它當作了一個字串來看待。
因此新人同學們最好寫完整一點:

echo $arr[‘some_key’];

這樣就沒有問題了,如果你要把它放在雙引號中連用,也不能省掉引號,可以這樣寫:

echo “這是混在雙引號中的字串{$arr[‘some_key’]}”;

 

3. 類型戲法

類型戲法相當好用,比如有一個表單送出過來的變量,標準情況下它應該是整型的,有時候偷懶省去校驗的寫法可以是這樣的:

$intVar = (int)$_POST[‘post_var’];

再比如陣列,有時候寫鍵值要打引號是不是很不爽啊,我們可以把它轉換成object,比如:

$arr = array(‘name’ => ‘volcano’, ‘sex’ => ‘male’);

$arr = (object)$arr;

echo $arr->name;

echo $arr->sex;

是不是很省事?

 

4. lambda函數

lamda函數和array_*系列函數使用有奇效,拿php手冊上的一個例子來說:

<?php

$av = array(“the “, “a “, “that “, “this “);

array_walk($av, create_function(‘&$v,$k’, ‘$v = $v . “mango”;’));

print_r($av);

?>

至少省了一個for迴圈

 

5. 嵌套迴圈顯示表格的單元格

嵌套迴圈顯示表格的單元格,這是一個很老的話題哦,往往會要在某個單元格後邊加個條件判斷什麼的,考慮是不是要輸出tr抑或是td標籤。

俺這裡介紹一個辦法,利用array_chunk函數能夠比較工整的輸出html,見下例,這個例子要輸出一個4行6列的表格:

<?php

$arr = range(1, 24); //這個會生成一個陣列array(1,2,3,4….24)

$arr = array_chunk($arr, 6);

// output table

?>

<table> <?php foreach($arr as $row): ?> <tr> <?php foreach($row as $col):?> <td><?php echo $col?></td> <?php endforeach;?> </tr> <?php endforeach;?> </table>

PHP程式設計問題諮詢:
請問,如何取得用戶的真實IP?

———————————————————
PHP程式設計問題回覆:
您要取得用戶的真實IP,可以參考以下的範例:

———————————————————

<?
function iptype1 () {
if (getenv("HTTP_CLIENT_IP")) {
   return getenv("HTTP_CLIENT_IP");
}
else {
   return "none";
}
}
function iptype2 () {
if (getenv("HTTP_X_FORWARDED_FOR")) {
   return getenv("HTTP_X_FORWARDED_FOR");
}
else {
   return "none";
}
}
function iptype3 () {
if (getenv("REMOTE_ADDR")) {
   return getenv("REMOTE_ADDR");
}
else {
   return "none";
}
}
function ip() {
$ip1 = iptype1();
  $ip2 = iptype2();
$ip3 = iptype3();
if (isset($ip1) && $ip1 != "none" && $ip1 != "unknown") {
   return $ip1;
}
elseif (isset($ip2) && $ip2 != "none" && $ip2 != "unknown") {
   return $ip2;
}
elseif (isset($ip3) && $ip3 != "none" && $ip3 != "unknown") {
   return $ip3;
}   
  else {
  return "none";
}
}

Echo ip();
?>  

———————————————————

PHP程式設計問題諮詢:
怎麼在圖片裏顯示IP位址?

———————————————————
PHP程式設計問題回覆:
怎麼在圖片裏顯示IP位址,可以參考以下的範例:

———————————————————
<?
  Header("Content-type: image/png");
  $img = ImageCreate(180,50);
  $ip = $_SERVER['REMOTE_ADDR'];
  ImageColorTransparent($img,$bgcolor);
  $bgColor = ImageColorAllocate($img, 0x2c,0x6D,0xAF); // 背景顏色
  $shadow = ImageColorAllocate($img, 250,0,0);    // 陰影顏色
  $textColor = ImageColorAllocate($img, oxff,oxff,oxff);       // 字體顏色
  ImageTTFText($img,10,0,78,30,$shadow,"d:/windows/fonts/Tahoma.ttf",$ip); //顯示背景
  ImageTTFText($img,10,0,25,28,$textColor,"d:/windows/fonts/Tahoma.ttf","your ip is".$ip); // 顯示IP
  ImagePng($img);
  imagecreatefrompng($img);
  ImageDestroy($img);
?>
———————————————————

學員來函諮詢:
老師您好:
好久不見,有一個問題想請教您,最近有接觸到一個倉儲的業務,是有關於管理進出貨的
不知道有沒有相關PHP的軟體可以處理,詳細的說明請見附檔
謝謝
祝:安康

——————————————————————
洪總教頭回覆:
可以用此教學:課程中的PHPMaker快速生成PHP網站
 
 PHP程式設計+MySQL資料庫+Dreamweaver整合教學(PHPMaker運用設計網站教學):

http://por.tw/php/new-E_learning/index.php
 
———————————————————————————
用PHPMaker快速生成PHP網站管理進出貨的好處:
1.生成管理進出貨是網路網站,只要能上網,有帳號與密碼任何人都可以瀏覽
(有管理者權限者,可以進階新增、修改、搜尋甚至刪除)
2.解決個人電腦版進銷存的缺點
3.快速生成(不用花很多時間設計)更不用花錢購買套裝進銷存軟體
(買軟體萬一日後不能更新或擴增…不合用就變成:垃圾!)
4.獨家系統(依據自己需要設計欄位,不會有一般進銷存用不到的雜七雜八選項或欄位的缺點)
5.可以自由擴增,不會受制於人或被套裝軟體綁死。

PHP程式設計問題諮詢:
請問,怎麼讓程式一直運行下去,而不是超過30秒就停止?

———————————————————
PHP程式設計問題回覆:
您要讓程式一直運行下去,而不是超過30秒就停止,可以參考以下的說明:

———————————————————
怎麼讓程式一直運行下去,而不是超過30秒就停止?

set_time_limit(60)//最長運行時間一分鐘
set_time_limit(0)//運行到程式自己結束,或手動停止

———————————————————

PHP程式設計問題諮詢:
我怎麼知道系統預設支援什麼函數?

———————————————————
PHP程式設計問題回覆:
要怎麼知道系統預設支援什麼函數,請看以下的範例:

<?php
$arr = get_defined_functions();
Function php() {
}
echo  "<pre>";
Echo  "這裏顯示系統所支援的所有函數,和自定以函數php ";
print_r($arr);
echo  "</pre>";
?>

———————————————————

Navicat Premium Enterprise 11.0.18 (資料庫管理工具)

Navicat Premium(資料庫管理工具) 是一個可多重連線的資料庫管理工具
Navicat 的功能足以符合專業開發人員的所有需求,但是對資料庫伺服器的新手來說又相當容易學習。
它可讓你以單一程式同時連線到目前世面上所有版本的主流資料庫並進行管理和操作,支援的資料庫有:
MySQL、SQL Server、SQLite、Oracle 及 PostgreSQL。
讓管理不同類型的資料庫更加方便。
支援Microsoft Windows XP SP2, Vista, Windows 7, Windows 8, Server 2003, Server 2008, Server 2012操作系統!

Navicat Premium 使你能簡單並快速地在各種資料庫系統間傳輸資料,或傳輸一份指定 SQL 格式及編碼的純文字檔案。
不同資料庫的批處理作業可以計劃並在特殊的時間運行。
其他功能內含匯入精靈、匯出精靈、查詢建立工具、報表建立工具、資料同步、備份、工作計劃及更多。

Navicat Premium 結合了其他 Navicat 成員的功能。
有了不同資料庫類型的連線能力,Navicat Premium 支援在 MySQL、SQL Server、SQLite、Oracle 及 PostgreSQL 之間傳輸資料。
它支援大部份 MySQL、SQL Server、SQLite、Oracle 及 PostgreSQL 的功能,內含存儲過程,事件,觸發器,函數,檢視等。

Navicat Premium 適用於三種平台 – Microsoft Windows、Mac OS X 及 Linux。它可以讓使用者連線本機或遠端伺服器、提供一些實用的資料庫工具如資料模型工具、資料同步、結構同步、匯入、匯出、備份、復原及報表以協助管理資料。

選取 Navicat 的十大理由:
Navicat 已被下載過超過 250 萬次,累積滿意客戶超過 100,000 個,遍佈 138 個國家。
看罷以下十個理由,你將不得不把 Navicat 作為你的資料庫管理工具!

1、屢獲殊榮.:在過去多年,Navicat 屢獲殊榮,產品的優越效能在多個業界獎項中深得專業人士認同,被 CNET Download.com 的編輯評選為第一名、成為 Developer.com 2007 年度產品系列的決賽入圍產品、被 MacUser 評鑑為 4-rabbit、Red Herring 亞洲科技百強 得獎者、亞太區資訊及通信科技大獎的候選者,以及於香港資訊及通信科技獎中取得全年大獎的殊榮。

2、廣被各大知名企業使用:Navicat 強大而且可靠,深得許多企業信賴,內含《財富》世界 500 強的公司。其中一些專門的客戶,有蘋果公司、雅虎公司、聯邦快遞、惠普等等。

3、使用者介面簡單易用:Navicat 設計簡單,易於使用,不管你是一個資料庫開發人員或是一個新手,你會發現 Navicat非常容易使用。

4、豐富的功能:NNavicat 提供了豐富的功能,使你的資料庫管理更輕鬆更快捷。除了一般的資料庫管理功能,如編輯或設計表、資料寫入、SQL 轉儲,和建立或編輯使用者,其他有用的功能內含:匯入/匯出精靈、報表建立工具、資料模型、查詢建立工具、自動完成代碼、資料/結構同步,批處理作業計劃,HTTP/SSH 通道連線、備份以及更多。

5、支援 SSH 通道/HTTP 連線:Navicat 支援通過 SSH 通道和 HTTP 通道連線到你的資料庫。SSH 能防止安全漏洞,並容許你訪問遠端伺服器而不受安全性影響。

6、支援最全面的檔案類型的匯入/匯出:Navicat 支援最全面的資料格式遷移。Navicat 的匯入精靈容許資料從多達 11 種資料格式匯入到資料庫,同時 Navicat 的匯出精靈支援資料匯出到 11 種資料格式,內含 MS Access、MS Excel、XML、HTML、TXT、CVS 及更多。

7、功能不斷更新:十多年來,我們的客戶群已超過 100,000 個使用者,內含許多大型企業、政府機構、大學和個人開發人員,你可以放心,我們將持續地提供客戶支援,創新和令人振奮的新功能。我們的開發團隊有良好的組織,確保我們的產品支援資料庫的創新科技。

8、價格相宜:Navicat 提供一個公平的定價模式。為不同的預算和項目的要求,提供了大量許可證和區功能變數許可證的折扣優惠。對於非商業組織,我們更會給予一個特別價格。為了讓 Navicat 保持為最具成本效益的工具,一旦成為我們的客戶,我們會為客戶提供免費和無限量的電子信件支援,更可享有免費升級至次要版本。

9、專責的客戶支援團隊:我們的客戶支援團隊是由擁有多年經驗的專業人員組成,我們盡一切努力,務求處理所有客戶疑難,致力提供超乎客戶所期望的支援服務。

10、我們更致力聆聽和化解所有客戶的問題,並會迅速提供解決專案。

Navicat Premium Enterprise 11.0.18 (資料庫管理工具) | Home Page: www.navicat.com

 Navicat Premium Enterprise 11.0.18 (資料庫管理工具) | Size: 27 MB / 30 MB