PHP中自增自减运算
问题:若$i=2,求表达式($i++)*($i++)*($i++)的值,并求$i的值
答案:($i++)*($i++)*($i++)结果为24,$i为5
分析:先看计算顺序,发现有括号则先算括号里面的,先取$i的值2为($i++)的值,然后$i自加为3; [此时($i++)左=2,$i=3]
再算括号中,先取此时的$i的值3为($i++)的值,然后$i再自加为4;[此时($i++)中=3,$i=4]
后算括号右,先取此时的$i的值4作为($i++)的值,然后$i再自加为5
最后做乘法运算,即2*3*4=24 $i=5
这本来是session的基本用法,但在php中就不灵了。不过我们可以把session变量注册成"跨窗口的全局变量"。但这有一个条件,就是要向需要使用该session变量的窗口发送变量名为session_name(),值为session_id()的变量,用表单或者在url后面用?带上都可以.并且在使用session变量的页面的一开始处调用session_start()。
例子如下:
login.php文件:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>登陆画面</title>
</head>
<body>
<form action="result.php" method="post">
<table width="100%" border="0">
<tr>
<td align="center" valign="middle"><p>测试系统-----登陆画面</p>
<table width="250" style="border-collapse:collapse; border-color:#000000"
border="1" cellpadding="2" cellspacing="2">
<tr>
<td width="30%">用户:</td>
<td><input name="username" type="text" style="width:150px"/></td>
</tr>
<tr>
<td>密码:</td>
<td><input name="password" type="password" style="width:150px"/></td>
</tr>
<tr>
<td colspan="2" align="center"><input type="submit" value="登陆"/></td>
</tr>
</table>
</td>
</tr>
</table>
</form>
</body>
</html>
result.php文件:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>结果画面</title>
</head>
<body>
<form method="post">
欢迎你,
<?php
@session_start();
if(isset($_POST["username"])){
$username = htmlspecialchars($_POST["username"]);
$_SESSION[''username''] = $username;
} else {
$username = $_SESSION[''username''];
}
echo $username;
?>
<br/>
<br/>
<a href="login.php">返回</a>
<a href="database.php?".session_name()."=".session_id()."">数据库测试</a>
</form>
</body>
</html>
database.php文件:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>结果画面</title>
</head>
<body>
<form method="post">
Email:
<?php
@session_start();
$conn = mssql_pconnect(''localhost'', ''sa'', ''sa'');
mssql_select_db(''netstore'');
$query = mssql_query(''select * from CUSTOMER'', $conn);
$name = mssql_result($query, 0, ''email'');
echo $name;
?>
<br/>
<br/>
<a href="result.php?".session_name()."=".session_id()."">返回</a>
</form>
</body>
</html>
Jakarta Struts结构移植过来的PHP开发框架,使用面向对象的开发结构和API,模拟了一个HTTP Servlet容器和使用了PHP服务页面引擎技术。
下载地址:http://mojavelinux.com/projects/studs/
文件结构如下:
如上图,WEB-INF中的文件都是Studs框架的核心文件(尤其是lib和tld下的文件),其中:
1.messages.properties文件:
welcome.title=Studs :: Welcome
welcome.heading=Welcome to Studs!
welcome.message=The application has been successfully installed!
pageviews.message=This page has been viewed <strong>{0}</strong> times.
2.struts-config.xml文件:
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN"
"http://jakarta.apache.org/struts/dtds/struts-config_1_2.dtd">
<!--
This is a basic Studs/Struts configuration file with an example
welcome action/page and other commented sample elements.
-->
<struts-config>
<!-- example configuration of a database connection
<data-sources>
<data-source type="horizon.sql.BasicDataSource">
<set-property
property="description"
value="Primary data source for localhost database"/>
<set-property
property="driverClassName"
value="horizon.sql.drivers.MySQLDriver"/>
<set-property
property="username"
value="user"/>
<set-property
property="password"
value="secret"/>
<set-property
property="url"
value="mysql://localhost/dbname"/>
</data-source>
</data-sources>
-->
<form-beans>
<!-- sample form bean descriptor for an ActionForm
<form-bean
name="inputForm"
type="app.InputForm"/>
-->
</form-beans>
<global-exceptions>
<!-- sample exception handler
<exception
key="expired.password"
type="app.ExpiredPasswordException"
path="/changePassword.jsp"/>
-->
</global-exceptions>
<global-forwards>
<!-- Default forward to "welcome" action -->
<forward name="welcome" path="/welcome.do"/>
</global-forwards>
<action-mappings>
<!-- Default "welcome" action -->
<action path="/welcome" forward="/pages/welcome.psp"/>
<action path="/example" forward="/pages/example.psp"/>
<!-- sample input and input submit actions
<action
path="/Input"
type="org.apache.struts.actions.ForwardAction"
parameter="/pages/Input.jsp"/>
<action
path="/InputSubmit"
type="app.InputAction"
name="inputForm"
scope="request"
validate="true"
input="/pages/Input.jsp"/>
<action
path="/edit*"
type="app.Edit{1}Action"
name="inputForm"
scope="request"
validate="true"
input="/pages/Edit{1}.jsp"/>
-->
</action-mappings>
<controller locale="false" inputForward="true"/>
<message-resources parameter="/WEB-INF/messages.properties"/>
</struts-config>
3.web.xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
<display-name>Studs Basic Application</display-name>
<description>A bare-bones foundation for creating a web application based on the Studs MVC Framework+</description>
<context-param>
<!-- if controlAllResources is set, all files should be handled by the stratus
container, including all non-php/html files -->
<param-name>controlAllResources</param-name>
<param-value>false</param-value>
</context-param>
<!-- Servlet Definitions -->
<servlet>
<servlet-name>default</servlet-name>
<servlet-class>stratus.servlets.DefaultServlet</servlet-class>
<init-param>
<param-name>listings</param-name>
<param-value>true</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet>
<servlet-name>phase</servlet-name>
<servlet-class>phase.servlet.PhaseServlet</servlet-class>
<init-param>
<param-name>scratchdir</param-name>
<param-value>/WEB-INF/work</param-value>
</init-param>
<init-param>
<param-name>tldresourcedir</param-name>
<param-value>/WEB-INF/tld</param-value>
</init-param>
<init-param>
<param-name>ignoreEL</param-name>
<param-value>false</param-value>
</init-param>
<load-on-startup>2</load-on-startup>
</servlet>
<servlet>
<servlet-name>action</servlet-name>
<servlet-class>studs.action.ActionServlet</servlet-class>
<init-param>
<param-name>config</param-name>
<param-value>/WEB-INF/struts-config.xml</param-value>
</init-param>
<init-param>
<param-name>validating</param-name>
<param-value>true</param-value>
</init-param>
<load-on-startup>3</load-on-startup>
</servlet>
<!-- Servlet Mappings -->
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>phase</servlet-name>
<url-pattern>*.psp</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
<!-- Mime Type Mappings -->
<mime-mapping>
<extension>html</extension>
<mime-type>text/html</mime-type>
</mime-mapping>
<mime-mapping>
<extension>css</extension>
<mime-type>text/css</mime-type>
</mime-mapping>
<mime-mapping>
<extension>js</extension>
<mime-type>text/javascript</mime-type>
</mime-mapping>
<mime-mapping>
<extension>png</extension>
<mime-type>image/png</mime-type>
</mime-mapping>
<mime-mapping>
<extension>jpg</extension>
<mime-type>image/jpeg</mime-type>
</mime-mapping>
<mime-mapping>
<extension>jpeg</extension>
<mime-type>image/jpeg</mime-type>
</mime-mapping>
<mime-mapping>
<extension>gif</extension>
<mime-type>image/gif</mime-type>
</mime-mapping>
<!-- Default Welcome File List -->
<welcome-file-list>
<welcome-file>index.psp</welcome-file>
</welcome-file-list>
</web-app>
4.文件build.xml:
<?xml version="1.0"?>
<project name="Studs Basic" basedir="../.." default="package">
<property file="../../build.properties" />
<target name="package" depends="prepare">
<mkdir dir="../../${release.dir}/${project.release.version}"/>
<tar destfile="../../${release.dir}/${project.release.version}/studs-basic-${project.release.version}.tar.gz" compression="gzip">
<tarfileset dir="." prefix="studs-basic" defaultexcludes="yes">
<exclude name="classes/build.xml"/>
<exclude name="**/TODO"/>
<exclude name="**/NOTES"/>
</tarfileset>
</tar>
</target>
<target name="clean">
<!-- make sure to break symlinks -->
<symlink action="delete" link="${basedir}/WEB-INF/lib" failonerror="no"/>
<symlink action="delete" link="${basedir}/WEB-INF/tld" failonerror="no"/>
<delete includeemptydirs="yes" failonerror="no">
<fileset dir="WEB-INF/work">
<include name="**"/>
</fileset>
<fileset dir="WEB-INF/lib">
<include name="**"/>
</fileset>
<fileset dir="WEB-INF/tld">
<include name="**"/>
</fileset>
</delete>
</target>
<target name="prepare" depends="clean">
<!-- create work directory -->
<mkdir dir="WEB-INF/work"/>
<chmod dir="WEB-INF/work" perm="0777" type="dir"/>
<!-- create lib directory and copy framework libraries -->
<mkdir dir="WEB-INF/lib"/>
<copy todir="WEB-INF/lib">
<fileset dir="../../src">
<include name="**"/>
</fileset>
</copy>
<!-- create tld directory and copy known tlds -->
<mkdir dir="WEB-INF/tld"/>
<copy todir="WEB-INF/tld">
<fileset dir="../../conf/tld">
<include name="*.tld"/>
</fileset>
</copy>
<!-- copy over the controller and server conf file -->
<copy todir=".">
<fileset dir="../../conf">
<include name="index.php"/>
<include name=".htaccess"/>
</fileset>
</copy>
</target>
</project>
5.logging.properties文件:
# == Setup log appenders ==
#logging.rootLogger=DEBUG, file
#logging.appender.file=horizon.util.logging.FileLogAppender
#logging.appender.file.file=/tmp/studs-basic.log
# == Specific logging per category ==
#logging.logger.[partial package or classname]=DEBUG
其他文件基本上都可以在框架源代码中找到。
页面文件如下:
1.index.php:
<?php
error_reporting(E_ALL);
ini_set(''include_path'', ''WEB-INF/lib'' . (DIRECTORY_SEPARATOR == ''/'' ? '':'' : '';'') . ''WEB-INF/classes'');
umask(0002);
require_once ''horizon/init.php'';
import(''stratus.connector.HttpProcessor'');
import(''stratus.config.ContextConfig'');
$config = & new ContextConfig(dirname(__FILE__));
$processor = & new HttpProcessor($config->getContext());
$processor->run();
?>
2.index.psp:
<%...@ page language="php" %>
<%...@ taglib uri="/WEB-INF/tld/phase-core.tld" prefix="c" %>
<%...@ taglib uri="/WEB-INF/tld/studs-html.tld" prefix="html" %>
<c:redirect context="/"><html:rewrite forward="welcome"/></c:redirect>
3.welcome.psp:
<%...@ page language="php" %>
<%...@ taglib uri="/WEB-INF/tld/phase-core.tld" prefix="c" %>
<%...@ taglib uri="/WEB-INF/tld/phase-fmt.tld" prefix="fmt" %>
<%...@ taglib uri="/WEB-INF/tld/studs-html.tld" prefix="html" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title><fmt:message key="welcome.title" /></title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
<h3><fmt:message key="welcome.heading" /></h3>
<p><fmt:message key="welcome.message" /></p>
<p><html:link action="/example">Click here</html:link> for an example of the template tag library.</p>
<c:set var="welcomePageViewCount" value="${applicationScope.welcomePageViewCount + 1}" scope="application"/>
<p style="font-size: small;"><fmt:message key="pageviews.message" arg0="${applicationScope.welcomePageViewCount}"/></p>
</body>
</html>
4.example.psp:
<%...@ taglib uri="/WEB-INF/tld/studs-template.tld" prefix="template" %>
<%...@ taglib uri="/WEB-INF/tld/phase-string.tld" prefix="str" %>
<%...@ taglib uri="/WEB-INF/tld/phase-core.tld" prefix="c" %>
<template:insert template="/pages/tmpl/template.psp">
<template:put name="title" content="Studs :: Template Taglib Example" direct="true"/>
<template:put name="heading" direct="true">Template Taglib Example</template:put>
<template:put name="intro" direct="true">
This page demonstrates the use of the studs template taglib. Content is inserted by the parent page either directly or via an include file. Below are two examples of content insertion.
</template:put>
<template:put name="content" direct="true">
<str:replace replace="LF" with="<br />">This text was specified inline using the template:put tag.
It also uses the str:replace taglib to convert endlines to BR tags.
I am also testing the conditional EL syntax. <strong>${2 % 2 ? ''odd'' : ''even''}</strong></str:replace>
</template:put>
<template:put name="content2" content="/pages/tmpl/content.psp" />
</template:insert>
5.template.psp:
<%...@ taglib uri="/WEB-INF/tld/studs-html.tld" prefix="html" %>
<%...@ taglib uri="/WEB-INF/tld/studs-template.tld" prefix="template" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title><template:get name="title" /></title>
</head>
<body>
<h3><template:get name="heading" /></h3>
<p><template:get name="intro" /></p>
<p style="border: 1px dashed #999999; background-color: #F0F0F0;">
<template:get name="content" />
</p>
<p style="border: 1px dashed #999999; background-color: #F0F0F0;">
<template:get name="content2" />
</p>
<p>« <html:link forward="welcome">Back</html:link></p>
</body>
</html>
6.content.psp:
This text comes from an include file using the template:put tag.
这样,一个基于PHP Studs框架的示例程序就完成了。(注:上诉代码取自studs自带的例子)
文件下载网址 Apache 2.2.4 -- www.apache.com PHP 5.2.0 -- www.php.net MySQL 5.0.27 -- www.mysql.com Zend Optimizer 3.2.0 -- www.zend.com phpMyAdmin 2.9.2 -- www.phpmyadmin.net Apache 2.2.4 的安装 1.站点下载 apache_2.2.4-win32-x86-no_ssl.msi 并执行。 2..按3 次Next按钮,安装程序要求输入你的Network Domain(网络域名)、Server Domain(服务器域名)和网站管理员的E-mail。 3..进入Next后,默认的安装路径是"C:Program FilesApache Software FoundationApache2.2",修改路径,改为前面所述的"D:Program FilesApache2"。 然后一路下去,直到安装结束;此时,打开D盘下的Program Files文件夹,可以看到有一个名为Apache2的文件夹。 打开IE,然后在地址栏输入:"http://localhost" 或者 "http://127.0.0.1" 可以看到Apache安装完成的成功页面;以后网页的存在位置就在 "D:Program FilesApache2htdocs" 目录。 PHP 5.2.0 的安装 1.到其官方站点下载 php-5.2.0-Win32.zip 并解压(在此不要下载及使用它的Installer,这种方式虽然很自动化、很智能,但也存在很多方面的限制,因为不推荐。) |
对于已经熟悉Apache+PHP+MYSQL的安装配置的开发人员,或者是不想涉及开发而只是想建立PHP应用程序的人来说,使用Apache/PHP/MYSQL安装套件来配置PHP的WEB环境会方便不少,但是选择合适的套件还是需要的。个人把曾经使用过的,以及比较知名的安装套件总结如下:
WAMP
一直在用的,带有phpMyAdmin和SQLiteManager ,提供了很多Add-on插件,如PHP版本切换、ZEND OPTIMIZER 、WEBALIZER等,站长推荐!
http://www.wampserver.com/
TSW
比较完整,支持PERL,FTPServer,还提供有Tomcat和wordpress插件
http://sourceforge.net/projects/yawamp/
GREENAMP
国产的套件,无删除功能
http://chin.blogchina.com
VertrigoServ
内置了ZendOptimizer
http://vertrigo.sourceforge.net/
XAMP
很不错,提供了丰富的插件,如perl、python、tomcat和cocoon
http://www.apachefriends.org/de/xampp-windows.html
WAPM
国产的,支持Tomcat和Turck MMCahe、ZendOptimizer
http://w.yi.org/
Appserv
也整合了Zend Optimizer
http://www.appservnetwork.com/
Apache2Triad
包含了Perl , Python
http://apache2triad.sourceforge.net
EasyPHP
安装比较简单
http://www.easyphp.org/
LiteWeb 支持Perl和虚拟域名
http://www.cmfperception.com/liteweb.html
phpHome
http://phphome.sourceforge.net/
http://phpnow.org/download.html
您可能感兴趣的文章:
源码分析系列之json_encode()如何转化一个对象 2021-04-22php中去除文字内容中所有html代码 2013-08-02index.php怎么打开?如何打开index.php? 2017-07-06PHP中func_get_args(),func_get_arg(),func_num_args()的区别 2013-10-04PHP编程 SSO详细介绍及简单实例 2017-01-25PHP实现创建以太坊钱包转账等功能 2021-04-20ThinkPHP使用心得分享-ThinkPHP + Ajax 实现2级联动下拉菜单 2014-05-31谈谈PHP中相对路径的问题与绝对路径的使用 2016-08-24php微信公众账号开发之五个坑(二) 2016-10-02PHP如何通过date() 函数格式化显示时间 2020-11-13PHP+jQuery+Ajax实现多图片上传效果 2015-03-15jQuery+PHP+MySQL实现无限级联下拉框效果 2016-02-21PHP如何使用cURL实现Get和Post请求 2020-07-11thinkPHP中多维数组的遍历方法 2016-01-12golang与php实现计算两个经纬度之间距离的方法 2016-07-29php有序列表或数组中删除指定的值的实现代码 2021-08-22SQL server 自增ID--序号自动增加的字段操作 2020-12-08php构造方法中析构方法在继承中的表现 2016-04-15php图片添加文字水印实现代码 2016-03-17PHP正则表达式过滤html标签属性(DEMO) 2016-05-06