小编Ale*_*exV的帖子

在PHP中回答HTTP_IF_MODIFIED_SINCE和HTTP_IF_NONE_MATCH

我有可用于PHP 5.1.0+的可缓存动态内容.我已经向客户端发送了正确的标题(包括Last-Modified和ETag).

我现在希望我的脚本能够回答$_SERVER['HTTP_IF_MODIFIED_SINCE']$_SERVER['HTTP_IF_NONE_MATCH']在场时出现.当条件匹配时,我想回答HTTP 304 "Not Modified"客户.

什么是正确的条件?我究竟发出304而不是整个内容?

已接受的答案 如何知道何时发送304 Not Modified响应似乎正确地发出了这个问题,但是我很难将该代码移植到PHP 5.

谢谢!

php caching header http-headers

11
推荐指数
1
解决办法
2万
查看次数

将Flash(swf)文件嵌入HTML(和XHTML)文档的最终方法是什么?

像大多数人一样,我使用SWFObject将Flash(swf)文件嵌入到我的Web项目中.

如您所知,SWFObject提供了两种嵌入Flash的方法:静态发布和动态发布.

静态发布使用常规标记将文件嵌入到文档中,并且还使用仅使用常规标记无法进行的JavaScript检查.这很好,好像你有无法打开JavaScript的客户(搜索引擎,一些便携式设备......),文件仍会显示(如果他们安装了正确的Flash插件).但是如果你有遗留/未修补的Internet Explorer上的人(2006年4月到2008年4月),他们将有可怕的"点击激活"与Flash进行交互.

动态发布使用JavaScript嵌入Flash.这将摆脱旧IE上的"点击激活"功能,但如果JavaScript关闭,Flash将根本不存在.

这两种方法都有其优点和不便之处.在一个乌托邦世界中,我们都会使用动态发布方法,但是我们(或者至少我们中的一些人)喜欢使用IE 6的旧系统(他们想要升级,但他们不能因为非常糟糕)设计软件,升级费用为10K + $).我需要支持旧版IE,并希望摆脱"点击激活"功能,同时支持关闭JavaScript的人.

那么结合静态动态发布方法呢?怎么样的:

<!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" lang="en" xml:lang="en">
    <head>
        <title>SWFObject 2 static+dynamic publishing example page</title>
        <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
        <script type="text/javascript" src="swfobject.js"></script>
        <script type="text/javascript">
        swfobject.embedSWF("test.swf", "myContent", "300", "120", "9.0.0", "expressInstall.swf");
        </script>
    </head>
    <body>
        <div id="myContent">
            <object id="myId" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="300" height="120">
                <param name="movie" value="test.swf" />
                <!--[if !IE]>-->
                <object type="application/x-shockwave-flash" data="test.swf" width="300" height="120">
                <!--<![endif]-->
                <div>
                    <h1>Alternative content</h1>
                    <p><a href="http://www.adobe.com/go/getflashplayer"><img …
Run Code Online (Sandbox Code Playgroud)

javascript flash swfobject

11
推荐指数
2
解决办法
4911
查看次数

什么是PHP中的魔术引号运行时?

我完全清楚PHP中魔术行情的异常,它是如何邪恶的,我像害虫一样避免它们,但它们是什么magic_quotes_runtime?来自php.ini:

运行时生成的数据的魔术引号,例如来自SQL的数据,来自exec()等的数据.

我应该检查是否打开并关闭:

set_magic_quotes_runtime(false);
Run Code Online (Sandbox Code Playgroud)

它经常默认开启吗?我知道它在5.3.0中被弃用并在6.0.0中被删除但是由于我的脚本支持5.1.0+,我想知道如何在"遗留"PHP中处理它(如果它是相关的).

编辑:为了清楚,我想退出('关闭魔术引号'); 当Magic引号为ON时.我不是在依赖他们!

php magic-quotes

10
推荐指数
1
解决办法
6405
查看次数

我在PHP中实现HTTP条件获取答案是否正常?

经过大量搜索,阅读我发现的每一个教程并在这里提出一些问题后,我终于设法回答了if-none-match和if-modified-自HTTP请求以来的错误(至少我认为).

要快速回顾一下,这就是我在每个可缓存页面上所做的事情:

session_cache_limiter('public'); //Cache on clients and proxies
session_cache_expire(180); //3 hours
header('Content-Type: ' . $documentMimeType . '; charset=' . $charset);
header('ETag: "' . $eTag . '"'); //$eTag is a MD5 of $currentLanguage + $lastModified
if ($isXML)
    header('Vary: Accept'); //$documentMimeType can be either application/xhtml+xml or text/html for XHTML (based on $_SERVER['HTTP_ACCEPT'])
header('Last-Modified: ' . $lastModified);
header('Content-Language: ' . $currentLanguage);
Run Code Online (Sandbox Code Playgroud)

此外,每个页面都有自己的URL(适用于所有语言).例如,"index.php"将在英文URL"/ en/home"和法语"/ fr/accueil"下提供.

我的一个大问题是回答"304 Not Modified"到if-none-match和if-modified-since,因为HTTP请求只在需要时.

我发现的最好的文档是:http: //rithiur.anthd.com/tutorials/conditionalget.php

这就是我所做的实现(这段代码在可以缓存的页面上称为ASAP):

$ifNoneMatch = array_key_exists('HTTP_IF_NONE_MATCH', $_SERVER) ? $_SERVER['HTTP_IF_NONE_MATCH'] : …
Run Code Online (Sandbox Code Playgroud)

php caching header http http-headers

8
推荐指数
1
解决办法
2630
查看次数

HTTP中的if-none-match和if-modified-since以及304澄清

我的问题是关于怎么回复一个HTTP 304"未修改"当我收到这两个如果,没有匹配,并从代理/客户端请求,如果-,因为修改.

来自RFC 2616第14.26节(http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.26):

如果没有任何实体标签匹配,则服务器可以执行所请求的方法,就像If-None-Match头字段不存在一样,但是也必须忽略请求中的任何If-Modified-Since头字段.也就是说,如果没有实体标签匹配,那么服务器绝不能返回304(未修改)响应.

我不太明白这个说法......

  1. "如果在PHP中没有任何实体标签匹配"他们会$_SERVER['HTTP_IF_NONE_MATCH']说我之前发送的ETag吗?
  2. 如果我正确理解了这个陈述,只要没有列出的ETag $_SERVER['HTTP_IF_NONE_MATCH']匹配我的ETag,我就会停止所有验证并正常提供页面.

任何人都可以用伪代码(或PHP代码)翻译这个RFC部分和/或回答我的2分以上?

编辑1: 谢谢St.Woland的回答.你(或其他任何人)可以告诉我这些6点是否正确:

  1. 格式$_SERVER['HTTP_IF_NONE_MATCH']可以是:

    a)If-None-Match:"xyzzy","r2d2xxxx","c3piozzzz"

    b)如果 - 无匹配:"xyzzy"

    并不是:

    c)If-None-Match:"xyzzy,r2d2xxxx,c3piozzzz"

  2. 如果!array_key_exists('HTTP_IF_NONE_MATCH', $_SERVER),anyTagMatched()返回NULL.

  3. 只要ETag $_SERVER['HTTP_IF_NONE_MATCH']匹配我的文档ETag,anyTagMatched()就会返回TRUE.

  4. 如果没有Etags $_SERVER['HTTP_IF_NONE_MATCH']匹配我的文档ETag,则anyTagMatched()返回FALSE.

  5. 如果$_SERVER['HTTP_IF_MODIFIED_SINCE']设置并匹配我的文档"上次修改"日期isExpired()返回FALSE,否则返回TRUE.

  6. 一旦anyTagMatched()返回TRUE,我发出304.如果anyTagMatched()返回NULL并isExpired()返回FALSE我可以发出304.在任何其他情况下,我正常服务我的页面(我也发布最新的Last-Modified和ETag标题).

php caching http http-1.1

8
推荐指数
1
解决办法
9930
查看次数

PHP:当Magic Quotes为ON时,如何(正确)删除数组中的转义引号

如您所知,当Magic Quotes为ON时,单引号会在值和键中转义.大多数在运行时删除Magic Quotes的解决方案只能取消值,而不是键.我正在寻找一种能够解决关键和价值观的解决方案......

我在PHP.net上发现了这段代码:

$process = array(&$_GET, &$_POST, &$_COOKIE, &$_REQUEST);
while (list($key, $val) = each($process))
{
    foreach ($val as $k => $v)
    {
        unset($process[$key][$k]);
        if (is_array($v))
        {
            $process[$key][stripslashes($k)] = $v;
            $process[] = &$process[$key][stripslashes($k)];
        }
        else
        {
            $process[$key][stripslashes($k)] = stripslashes($v);
        }
    }
}
unset($process);
Run Code Online (Sandbox Code Playgroud)

但是我不喜欢"&"引用和数组,因为我在过去遇到了像这样的 bug ...

有没有一种"更好"的方式在运行时使用魔术引号(键和值)而不是上面的方法?

php magic-quotes

7
推荐指数
1
解决办法
3066
查看次数

使用Swiftmailer的PHP驱动的HTML联系表单有多安全?

我的网站上有一个PHP驱动的HTML联系表单.目前我使用PHP mail()函数.因此,我必须做许多用户输入验证,以避免电子邮件头注入攻击.我认为我很安全,但我可能忘了一些东西,我想转移到一个可靠的PHP电子邮件库.我选择的库是Swiftmailer.

现在我想检查Swiftmailer是否解决了以下问题:

  1. 删除或逃避<,并>在发送者名称的字符.
  2. 从发件人名称中删除换行符(\n,\r\n...).
  3. 从电子邮件主题中删除或转义换行符.
  4. 规范化邮件正文中的换行符(电子邮件的内容).根据PHP文档,\n应该在内容和\r\n电子邮件标题分隔符中使用.

PS:我试图联系Swiftmailer团队,我的问题没有成功,所以我在这里尝试.

编辑:

我用Swiftmailer做了一些测试用例,这是我到目前为止所发现的:

  1. 当您拥有<>以发件人的名义时,您将收到无法发送的电子邮件错误邮件.这可能会导致你的邮件服务器的DOS攻击(也许我错了).这是正常的吗?!
  2. 换行符被转义,因此注入攻击失败.
  3. 换行符被转义,因此注入攻击失败.
  4. 测试但我无法看到Swiftmailer做什么(如果它做了什么).所以我在这里仍然处于黑暗中.

有人可以为我澄清#1和#4吗?我不确定这是否正常......

php security swiftmailer contact-form email-injection

7
推荐指数
1
解决办法
1622
查看次数

IE8如何在IE8及以下版本中"淡出"?

我只是想知道jQuery如何在IE浏览器不支持的情况下产生淡入淡出效果opacity?动画opacity是他们在Firefox和Chrome等其他浏览器中淡出的方式.我进入了代码,但老实说,我找不到任何可以理解的东西!

javascript jquery

6
推荐指数
1
解决办法
646
查看次数

在Delphi中,有一点需要将object类型的参数声明为const吗?

我知道const参数对于Delphi中简单类型和字符串的好处。但是一个const TStrings呢?由于const TStrings参数可以更改其项(内容),因此声明const TStrings参数的意义何在?这也适用于任何对象。

delphi const

6
推荐指数
1
解决办法
158
查看次数

如何测试是否允许PHP system()函数?并且出于安全原因没有关闭

我想知道如何测试服务器上是否允许system()或exec().我一直收到此错误"警告:出于安全原因,exec()已被禁用..."

我知道safe_mode函数在我的提供程序运行的php版本中被折旧(5.3.3)所以我不能使用get_ini('safe_mode')检查.

还有什么可做的?

我用它作为备份脚本.如果提供者允许系统,则脚本会生成一个tar文件,并在用户登录时将其邮寄给我.

提前致谢.

php system exec

5
推荐指数
1
解决办法
7254
查看次数