以上就是给各位分享如何在Apache2和PHP中启用和使用HTTPPUT和DELETE?,其中也会对apache怎么调用php的进行解释,同时本文还将给你拓展apachestruts2Apache环境
以上就是给各位分享如何在Apache2和PHP中启用和使用HTTP PUT和DELETE?,其中也会对apache怎么调用php的进行解释,同时本文还将给你拓展apache struts2 Apache环境下PHP利用HTTP缓存协议原理解析及应用分析、Apache Windows中安装Apache2和PHP4权威指南、asp.net – 何时使用HttpApplicationState而不是Web.Caching.Cache?、asp.net-mvc – 我什么时候应该在asp.net mvc应用程序中使用HttpDelete或HttpPut等相关知识,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录一览:- 如何在Apache2和PHP中启用和使用HTTP PUT和DELETE?(apache怎么调用php的)
- apache struts2 Apache环境下PHP利用HTTP缓存协议原理解析及应用分析
- Apache Windows中安装Apache2和PHP4权威指南
- asp.net – 何时使用HttpApplicationState而不是Web.Caching.Cache?
- asp.net-mvc – 我什么时候应该在asp.net mvc应用程序中使用HttpDelete或HttpPut
如何在Apache2和PHP中启用和使用HTTP PUT和DELETE?(apache怎么调用php的)
它应该是如此简单。我已经跟踪了所有可以找到的教程和论坛,但是无法正常工作。我只想在Apache2上用PHP构建RESTful API。
在我的VirtualHost指令中,我说:
<Directory /> AllowOverride All <Limit GET HEAD POST PUT DELETE OPTIONS> Order Allow,Deny Allow from all </Limit></Directory>
但是我向服务器发出的每个PUT请求都得到了不支持的405方法。
有人提倡使用Script指令,但是由于我使用的是mod_php(而不是CGI),所以我不明白为什么会这样。
人们提到使用WebDAV,但在我看来这似乎太过分了。毕竟,我不需要DAV锁定,DAV文件系统等。我要做的就是将请求传递给PHP脚本并自己处理一切。我只想为干净的语义启用PUT和DELETE。
答案1
小编典典您无需配置任何内容。只要确保请求映射到您的PHP文件并使用带有路径信息的请求即可。例如,如果您在根目录中handler.php
具有以此内容命名的文件:
<?phpvar_dump($_SERVER[''REQUEST_METHOD'']);var_dump($_SERVER[''REQUEST_URI'']);var_dump($_SERVER[''PATH_INFO'']);if (($stream = fopen(''php://input'', "r")) !== FALSE) var_dump(stream_get_contents($stream));
以下HTTP请求将起作用:
Established connection with 127.0.0.1 on port 81PUT /handler.php/bla/foo HTTP/1.1Host: localhost:81Content-length: 5 booHTTP/1.1 200 OKDate: Sat, 29 May 2010 16:00:20 GMTServer: Apache/2.2.13 (Win32) PHP/5.3.0X-Powered-By: PHP/5.3.0Content-Length: 89Content-Type: text/html string(3) "PUT"string(20) "/handler.php/bla/foo"string(8) "/bla/foo"string(5) "boo"Connection closed remotely.
您可以使用MultiViews隐藏“php”扩展名,也可以使用mod_rewrite使URL完全符合逻辑。
apache struts2 Apache环境下PHP利用HTTP缓存协议原理解析及应用分析
对于静态页面还有Etag。
一、先来看第一种情况:apache 静态页面
apache发送给客户端的静态页面一般包含Last-Modified和Etag,这两个标签的值来自静态文件的修改时间和inode。
下面是截取得apache返回客户端的头
XML/HTML代码
复制代码 代码如下:
立即学习“PHP免费学习笔记(深入)”;
Last-Modified: Fri, 26 Jan 2007 01:53:34 GMT
ETag: "3f9f640-318-cb9f8380"
搜索引擎之所以喜欢静态文件是因为有这两个标识,可以判断文件是否更新过
二、PHP等动态页面
由于php是动态生成的,它的内容是不能根据php程序的时间来确定最后修改日期,所以默认php返回客户端的时候补包含任何缓存控制,要想利用好缓存就必须了解缓存机制,和理减少b,s的交互,缩减带宽流量,减轻服务器负担...好处多多。
三、缓存控制的具体含义
先解释一下本人经过测试理解的这几个标签的含义
Cache-Control:指定请求和响应遵循的缓存机制。在请求消息或响应消息中设置Cache-Control并不会修改另一个消息处理过程中的缓存处理过程。请求时的缓存指令包括no-cache、no-store、max-age、max-stale、min-fresh、only-if-cached,响应消息中的指令包括public、private、no-cache、no-store、no-transform、must-revalidate、proxy-revalidate、max-age。
各个消息中的指令含义如下:
Public指示响应可被任何缓存区缓存。
Private指示对于单个用户的整个或部分响应消息,不能被共享缓存处理。这允许服务器仅仅描述当用户的部分响应消息,此响应消息对于其他用户的请求无效。
no-cache指示请求或响应消息不能缓存
no-store用于防止重要的信息被无意的发布。在请求消息中发送将使得请求和响应消息都不使用缓存。
max-age指示客户机可以接收生存期不大于指定时间(以秒为单位)的响应。
min-fresh指示客户机可以接收响应时间小于当前时间加上指定时间的响应。
max-stale指示客户机可以接收超出超时期间的响应消息。如果指定max-stale消息的值,那么客户机可以接收超出超时期指定值之内的响应消息。
php用法:
在输出之前用header(),(如果使用ob_start()可以将header放在程序任意地方)
PHP代码
复制代码 代码如下:
立即学习“PHP免费学习笔记(深入)”;
header(''Cache-Control: max-age=8'');
max-age=8表示最大生存期8秒,超过8秒浏览器必须去服务器重新读取,这个时间是以用户的读取页面开始计时的,而Expires是绝对时间。
Expires:缓存过期的绝对时间,如果过了它指定的那个时间点,浏览器就不认缓存了,要去服务器重新请求一份最新的。
Last-Modified:文档的最后修改时间,它的妙用就是:1
如果是静态文件,客户端会发上来它缓存里的时间,apache会来比对,如果发现没有修改就直接返回一个头,状态码是304,字节数非常少,(高级版本还会增加比较Etag来确定文件是否变化)
2 php动态文件:
客户端发上比对时间,php会判断是否修改,如果修改时间相同,就只会返回1024字节,至于为什么返回1024不得而知,如果你的php生成的文件非常大,它也只返回1024,所以比较省带宽,客户端会根据服务器端发过来的修改时间自动从缓存文件里显示。
注:如果没有Last-Modified头,Cache-Control和Expires也是可以起作用的,但每次请求要返回真实的文件字节数,而不是1024
四、HOW ?
静态页面不用去管它了,如果想更好的控制静态页面的缓存,apache有几个模块可以很好的控制,这里不讨论
php页面:
这里分两种:
1、不经常改动的页面,类似新闻发布,这类页面的特点:第一次发布之后会有几次改动,随着时间推移基本不会再修改。控制策略应该是:1第一次发布之发送Last-Modified,max-age设定1天,修改过之后更新Last-Modified,max-age时间随着修改次数正常。这样似乎比较繁琐,还要记录修改次数,也可以预计一下下次可能的修改时间用Expires指定到大概时间过期
PHP代码
复制代码 代码如下:
立即学习“PHP免费学习笔记(深入)”;
//header(''Cache-Control: max-age=86400'');//缓存一天
header(''Expires: Mon, 29 Jan 2007 08:56:01 GMT'');//指定过期时间
header(''Last-Modified: ''.gmdate(''D, d M Y 01:01:01'',$time).''GMT'');//格林尼治时间,$time是文件添加时候的时间戳
2 经常改动的页面
类似bbs,论坛程序,这种页面更新速度比较快,缓存的主要作用是防止用户频繁刷新列表,导致服务器数据库负担,既要保证更新的及时性,也要保证缓存能被利用
这里一般用Cache-Control来控制,根据论坛的发帖的频率灵活控制max-age。
PHP代码
复制代码 代码如下:
立即学习“PHP免费学习笔记(深入)”;
header(''Cache-Control: max-age=60'');//缓存一分钟
header(''Last-Modified: ''.gmdate(''D, d M Y 01:01:01'',$time).''GMT'');//格林尼治时间,$time是帖子的最后更新时间戳
五 额外
1 刷新,转到,强制刷新的区别
浏览器上有刷新和转到按键,有的浏览器支持用ctrl+F5强制刷新页面,它们的区别是什么?
转到:用户点击链接就是转到,它完全使用缓存机制,如果有Last-Modified那么不会和服务器通讯,用抓包工具可以查看到发送字节是0byte,如果缓存过期,那么它会执行F5刷新的动作。
刷新(F5):这种刷新也是根据缓存是否有Last-Modified来决定,如果有会转入304或1024(php),如果没有最后更新时间那么去服务器读取,返回真实文档大小
强制刷新:完全抛弃缓存机制,去服务器读取最新文档,向服务器发送的header如下
XML/HTML代码
复制代码 代码如下:
立即学习“PHP免费学习笔记(深入)”;
Cache-Control: no-cache
2 调试工具
查看浏览器和服务器交互比较好的工具是httpwatch pro,现在的版本4.1,支持ie7
还有别的代理抓包工具可以分析,http debugging。没用过,还有tcp抓包工具,2000自带的network。另外还有tcp抓包工具,2000自带的network monitor不过不是专门针对http的比较难用。
以上就介绍了apache struts2 Apache环境下PHP利用HTTP缓存协议原理解析及应用分析,包括了apache struts2方面的内容,希望对PHP教程有兴趣的朋友有所帮助。
Apache Windows中安装Apache2和PHP4权威指南
Apache 2和PHP是创建交互式网站的流行方案,而且成本很低。在Windows中安装Apache 2是一件轻而易举的事情,但要使PHP 4与Apache 2配合无间地运行,就需要一定的技巧。
在PHP 4.3手册的Windows安装小节,没有解释如何让PHP与Apache 2配合使用,而有关Apache 2安装的小节缺失了你需要的大量信息。在网上公布的其他安装指南中,也包含了不少错误,使一些安装人员只好不断试验和犯错。例如,有些人甚至将PHP的DLL替换成其他PHP版本的DLL。OK,为了节省你的宝贵时间,我们准备了这篇最权威的指南文章,帮你扫除一切烦恼。
使用正确版本的Windows
首先要说一说兼容性:Apache 2不能在Windows 95上运行;在Windows 98上勉强能够运行,但不能作为服务使用。从4.3版本开始,PHP也不再支持Windows 95。所以,你的Windows操作系统必须是Windows NT、2000或者XP。
Apache 2:源码还是二进制?
如果你有Visual C++ 5.0或更高的版本,或者安装了Microsoft Visual Studio,那么虽然可以根据源码来生成Apache,但请绝对不要这样做。在Visual Studio IDE中,Windows下的生成过程非常复杂。即使从命令行编译,也绝对不是一件易事。所以,除非你喜欢创建makefile,否则最好获得一份Windows Installer二进制发行包,也就是一个.msi文件。等你对Apache有了足够多的认识,知道自己要进行哪些定制操作时,才可考虑亲手生成(编译)Apache。
如果已经安装好并正在运行老版本的Apache,首先要停止它,卸载它,然后才能开始安装新服务器。多个版本的Apache 2不能共存。
双击Apache 2 .msi文件。同意许可协议后,正确设置Network Domain和Server Name(如果不打算将Apache安装到远程计算机,那么设置localhost就可以了),在Administrator''s Email Address区域输入你的电子邮件地址,保持端口80/服务选项单选钮的选中状态。在下一个对话框中如果选择Typical安装,可以快速地获得一个能实际工作的服务器环境。
安装提示
建议将默认安装目录从C:\Program Files\Apache Group变成C:\Apache或者符合8.3文件名格式的其他名称。这样一来,以后每次输入Apache安装路径时,都不必为其添加引号。
稍候片刻,安装向导会告诉你Apache 2安装成功。接下来惟一要做的事情就是进行测试,请打开浏览器并访问localhost,这样应该看到默认的Apache 2主页。
然后可以删除主Web服务器目录中的所有示例文件,它们默认位于C:\InstallDirectory\Apache\Apache2\htdocs中。如果有一个现成的主页Index.html,请把它拷贝到这里;另外,也可以马上创建一个空白主页。对于未初始化的HTML,以下代码就可以了:
<html>
<head>title=default server page</head>
<body>Default server page</body>
</html>
让Apache 2为PHP做好准备
从现在开始,你需要较多地以人工方式进行安装,不能简单地点击和选择几个选项了事。尽快习惯它吧,这才是Apache的方式。你需要编辑文件来设置不同的配置选项;如果操作不当,你所做的修改就会妨碍Apache的正确加载。如果设置引发错误,那么错误可能被记录到Apache 2错误日志中(默认为C:\InstallDir\Apache2\Logs\Error.log)。但能够像这样进行记录的毕竟是少数,大多数错误只会记录到Windows事件日志中(开始| 设置| 控制面板| 管理工具| 事件查看器)。
令人遗憾的是,在你对安装设置进行调试时,Windows事件日志并不是一个方便的工具。更好的做法是在命令行窗口中测试Apache服务器的加载,这样能立即看到错误报告。所以,在完成了我即将讨论的配置修改后,请打开一个命令行窗口,切换到Apache的binary目录(C:\InstallDir\Apache2\bin),在那里启动Apache。
Apache配置文件是C:\Apache\Apache2\Conf\Httpd.conf,可用任何文本编辑器来编辑。查找DirectoryIndex,定位到下面这一行:
DirectoryIndex index.html index.html.var # index.php
为了允许Apache处理PHP页,要删除注释字符(#),变成:
DirectoryIndex index.html index.html.var index.php
还要允许在任何目录中使用.htaccess文件,所以请在配置文件中查找AllowOverride,把这个设置从None改成All。保存了所做的改动后,可继续在文本编辑器中打开该文件,因为等会儿安装PHP时,要再次编辑这个文件。
安装PHP
虽然可以下载PHP的源码,但和Apache 2一样,最好直接使用二进制发行包。Apache 2可采取2种方式来运行PHP程序:通过一个CGI接口来运行(外部调用Php.exe),或者使用PHP的DLL文件在Apache的内部运行。后一种方式的速度较快。所以,针对每个版本的PHP,都会提供2个Windows二进制发行包。较小的是.msi包,它会安装CGI可执行程序Php.exe,但其中拿掉了通过Apache DLL来运行PHP脚本所需的模块。较大的.zip包则包含了所有这些东西,你可以从snaps.php.net网站的Win32区域下载它们。文件下载完毕后,把它解压到C:\Php(保留文件夹名称)。除非你有绝对的把握,请同时下载PHP手册,它有多种语言的版本可供选择。
配置Apache 2来运行PHP4
现在来到了最有趣的部分:将Apache和PHP完美地配合起来。首先,请将C:\Php\Dlls目录中的所有DLL文件拷贝到Windows的System目录(%windir%\System)。接着,在Apache的配置文件(Httpd.conf)中查找包含了大量AddType命令那个小节,自己添加下面这一行:
AddType application/x-httpd-php .php
将C:\Php\Php.ini-recommended拷贝到Windows目录(%windir%),把它重命名为Php.ini,并用文本编辑器打开它。编辑其中对doc_root、extension_dir和session.save_path进行设置的3行,使其和下面展示的一致,注意要把InstallDir替换成你的Apache 2的安装目录的名称。
doc_root = c:\
extension_dir = c:\php\extensions
session.save_path = c:/temp
在session.save_path中使用正斜杠和反斜杠都是允许的。PHP手册声称这些路径参数需要在最后添加一个反斜杠,但这个说法是不正确的。在PHP 4.3中不需要这样做。另外,如果C:\Temp不存在,请自己创建它。
下一步是允许Apache将PHP程序作为模块来运行,这要求你采取2个步骤。首先,将C:\Php\Php4ts.dll拷贝到Windows的系统文件夹(%windir%\System)。在Httpd.conf中找到LoadModule小节,自己添加下面这一行:
LoadModule php4_module “c:/php/php4apache2.dll”
如果你出于某种原因而需要在CGI模式中运行PHP程序(使用Php.exe),请将上面这一行变成注释,并在Httpd.conf中添加下面这些行:
ScriptAlias /php/ "c:/php/"
Action application/x-httpd-php "/php/php.exe"
一切都搞定了吗?
保存所做的更改后,你需要亲自去证明两点,才能确保Apache 2/PHP 4成为一对完美的搭档:Apache能正常加载吗,它能正确处理PHP页吗?
要知道Apache是否能够正常加载,在你已经打开的命令行窗口中输入以下命令:
apache –k start
另外,如果Apache正在运行,可用以下命令重新启动它:
apache –k restart
从命令行启动Apache的好处在于,如果出现一个错误,Apache会立即报告它。你可能遇到的最常见的问题在于,Apache可能由于某种原因而无法加载Php4apache2.dll。如果Apache报告了这个错误,请按前面所述的步骤重新操作一遍,确保一切都没有错误。
要知道Apache是否能正确地处理PHP页,请用你的文本编辑器创建一个简单的PHP页,命名为Phptest.php,其中只包含下面这一行:
<? phpinfo(); ?>
将文件保存到主Web服务器目录(C:\InstallDirectory\Apache\Apache2\Htdocs),用浏览器访问http://localhost/phptest.php。如果一切正常,应该看到一个含有PHP徽标的网页,其中包含大量设置和其他信息。要知道PHP当前是通过CGI来运行,还是在Apache内部运行,可以检查一下环境变量orig_script_name。如果PHP通过CGI来运行,这个变量的值就是/Php/Php.exe。如果Apache将PHP脚本作为模块来运行,该变量的值应该是/Phptest.php。
虽然在Windows上安装Apache 2和PHP并不是一件容易的事情,但也完全没必要采取摸着石头过河的做法。通过本文的说明,你应该可以快速搭建起这个史上最好的、成本最低的Web开发环境。
以上就介绍了Apache Windows中安装Apache2和PHP4权威指南,包括了Apache方面的内容,希望对PHP教程有兴趣的朋友有所帮助。
asp.net – 何时使用HttpApplicationState而不是Web.Caching.Cache?
由于Web.Caching.Cache更强大和灵活(似乎更多),是否有更好的使用HttpApplicationState的情况?
如果你能告诉我一些例子,我将非常感激:-)
解决方法
HttpApplicationState用于存储通常不会更改的应用程序数据.当应用程序启动时,它通常在global.asax中的Application_Start中填充.我个人没有太多使用它,但我相信它通常用于存储应用程序配置的小部分,这些应用程序配置对应用程序的所有用户都是全局的,并且不会很少更改或更改.进入应用程序状态的东西将无限期地保留在那里,直到应用程序回收.但是当它再循环并再次重新启动时,Application_State将再次执行并重新填充它.
重要的是要注意应用程序状态是单例并且不是线程安全的.因此,当您对其进行更改时,必须通过调用Application.Lock()和Application.UnLock()来锁定和解锁Application对象.
实际上有三种不同的方法可以缓存ASP.Net内容:页面级别,部分页面和数据.我将讨论数据缓存,因为我认为这与您的问题最相关. ASP.Net缓存用于存储大量的应用程序数据,这些数据对于每个请求从数据存储中检索都是昂贵的.ApplicationState和Cache之间的关键区别是1)缓存数据被设计为过期并从内存中清除通过各种触发器或条件(时间,其他缓存依赖性等),而ApplicationState将永远存在,直到应用程序回收,2)如果服务器遇到严重的内存压力,可以从内存中清除缓存数据,因此永远不能指望它在那里,必须经常测试它是否存在,而ApplicationState将始终存在.
缓存用于存储更靠近应用程序的数据,不需要在每次请求时从数据库中提取数据.缓存旨在存储大量数据,智能缓存架构可对性能产生巨大的积极影响.
asp.net-mvc – 我什么时候应该在asp.net mvc应用程序中使用HttpDelete或HttpPut
我应该使用什么HttpDelete / HttpPut?
解决方法
HTTP DELETE – 删除指定资源表示的实体数据.请求或响应消息中不存在有效负载.
HTTP PUT – 使用请求消息的有效负载中提供的新数据替换请求的资源上的现有实体数据. (msdn)
a presentation with Scott Hanselman可能很有趣. (我还没见过.)
如果您在那里订阅,那么OData上也有a couple of lectures on pluralsight.
关于如何在Apache2和PHP中启用和使用HTTP PUT和DELETE?和apache怎么调用php的的介绍现已完结,谢谢您的耐心阅读,如果想了解更多关于apache struts2 Apache环境下PHP利用HTTP缓存协议原理解析及应用分析、Apache Windows中安装Apache2和PHP4权威指南、asp.net – 何时使用HttpApplicationState而不是Web.Caching.Cache?、asp.net-mvc – 我什么时候应该在asp.net mvc应用程序中使用HttpDelete或HttpPut的相关知识,请在本站寻找。
本文标签: