小编Mik*_*nen的帖子

在PHP中使用哪种压缩方法?

我使用两个PHP脚本移动大量数据:一个在客户端使用命令行PHP脚本,另一个在Apache后面.我将数据发布到服务器端并使用php://输入流将其保存在Web服务器端.为防止达到任何内存限制,每个POST请求的数据将分为500kB块.这一切都很好.

现在,为了节省带宽并加快速度,我希望在发送之前压缩数据,并在另一端接收时解压缩.我找到了3对可以完成这项工作的功能,但我无法决定使用哪一个:

你会推荐哪一对功能?为什么?

更新:我刚读过zlib FAQ:

gzip format(gzencode)旨在保留有关单个文件的目录信息,例如名称和上次修改日期.gzcompress另一方面,zlib格式()设计用于内存和通信通道应用程序,并且具有更紧凑的头部和尾部,并且使用比gzip更快的完整性检查.

php compression gzip

61
推荐指数
3
解决办法
2万
查看次数

HTML:为什么Android浏览器在键盘中显示"Go"而不是"Next"?

我有一个HTML登录表单,其中包含以下元素(按此顺序):

  • input type=text (用户名输入)
  • input type=password (密码)
  • input type=submit (登录按钮)

当焦点在text input?时,为什么Android浏览器在软键盘中显示"Go"按钮而不是"Next"按钮?这会导致用户因为输入用户名后,用户在键盘(通常是正确的动作)按下右下角按钮,表单将用空密码,这显然是行不通的提交失败很容易登录.[如果我的浏览器设置为记住密码并且密码管理器能够填写密码,则此行为将有意义.但是,这不是这种情况,因为您可以在下面测试自己.]

我想让输入类型文本具有"下一步"按钮和输入类型密码(提交前的最后一个输入)以具有"开始"按钮.

问题表单的一个示例位于https://peda.net/:login(此表单包含用于检测输入的"Enter"键的代码,并阻止提交表单,除非最后一个可见表单输入被聚焦).

你知道这个问题的真正解决方法吗?我知道如果我实现本机应用程序,我会使用android:imeOptions="actionNext"(请参阅如何将Android软键盘"Go"按钮更改为"Next").但是,在这种情况下,它是一个HTML表单和Android默认浏览器.

至少在以下配置中可以看到问题:

  • 在Android 2.3.4上运行的"浏览器"系统应用程序(Cyanogenmod 7)
  • 在Android 4.2.2上运行的"浏览器"系统应用程序(Cyanogenmod 10.1)
  • 在Android 4.3.1上运行的"浏览器"系统应用程序(Cyanogenmod 10.2 M1)
  • 在Android 4.4.2(Cyanogenmod 11.0 M3)上运行的"浏览器"系统应用程序(AOSP浏览器)
  • 在Android 5.5.1(Cyanogenmod 12.1)上运行的"浏览器"系统应用程序(AOSP浏览器)[有箭头图标而不是单词"Go"]
  • 在Android 6.0.1(Cyanogenmod 13.0)上运行的"浏览器"系统应用程序(AOSP浏览器)[有一个箭头图标而不是单词"Go"]

html browser android android-softkeyboard

57
推荐指数
5
解决办法
5万
查看次数

我可以信任要调用PHP __destruct()方法吗?

在PHP5中,是否保证为每个对象实例调用__destruct()方法?程序中的异常是否可以防止这种情况发生?

php garbage-collection

41
推荐指数
5
解决办法
3万
查看次数

git的分布式问题跟踪器,具有可用的Eclipse Mylyn支持?

我正在使用git进行版本控制,但我目前缺少Eclipse Mylyn集成的好问题/错误/票证跟踪器.

我正在寻找的功能:

  • 开源实现(以便我可以添加我将来需要的功能.首选GPL,LGPL,MIT或BSD许可证).
  • 分布式(问题必须存储在存储库的git中,我打开以获取跟踪器的建议,这些跟踪器将问题存储在代码的相同或单独的分支中).
  • 必须拥有Eclipse Mylyn支持(以便我可以通过mylyn界面打开和关闭问题,我认为合理的实现可以在特定端口提供localhost HTTP服务器,mylyn将使用"web模板"连接器与问题跟踪器对话).最好是当我切换分支时,Mylyn会自动看到打开和关闭的问题,但我没关系,因为这不太聪明.
  • 能够跟踪分支之间的问题,例如:
    • 我有一个共同的父提交Z的分支X和Y.
    • 提交Z有一个未解决的问题Z1.
    • 分支Y有一个修复(提交Y4)并在Y中关闭问题.
    • 分支Y有一个新问题(提交Y2)
    • 分支Y在X中合并.
    • 问题跟踪器自动知道问题Z1在X中是固定的,但现在提交来自提交Y2的新问题.
  • 能够处理多个存储库打开,修改和关闭相同或不同问题的情况(分布式部分,我只是将其明确化).
  • 必须可以在64位和32位linux上运行(现在是ubuntu 10.04)
  • 最好用bash,c/c ++,python或perl(也可能是java或ruby)实现.

次要功能(会很好,但我可以没有):

  • 小到可以包含在项目的源代码中:最好是一个带有可执行位集的单个文件(例如单个bash或具有完整实现的python脚本)
  • 某种类型的Web用户界面,以便没有Eclipse Mylyn的人至少可以添加新问题并为现有问题添加注释(无需设置优先级甚至关闭问题)

你能提出什么建议吗?

更新:截至2012-09-13未找到合适的工具.迄今为止最佳匹配摘要:

  • Bugs Everywhere - 没有Mylyn的支持,过去两年中"Adnet Wilkins希望在"Plannet功能中看到BE的Mylyn连接器".否则项目将继续进行.
  • git-issues - 这个项目似乎已经死了.原作者大约两年前就停止了提交,其他作者在过去两年里做了不到十次的提交.
  • git-case - 这个项目似乎已经死了.原作者三年前就停止了提交.
  • 坚持 - 这个项目似乎已经死了.我甚至找不到公共存储库了.
  • TicGit这个项目似乎已经死了.我能找到的所有存储库都有免责声明项目不再开发.
  • TigGit-NG - 这个项目似乎已经多次死亡但是到目前为止,有人总是再次采用这个项目.这里也没有Mylyn的支持.需要最近的Ruby环境才能运行.
  • TicGit.net - 这个项目似乎是用C#编写的win32/.Net特定的TicGit分支.不符合我的需求.

eclipse git distributed mylyn issue-tracking

18
推荐指数
1
解决办法
1923
查看次数

在Google Chrome中调试CSP违规

我在使用以下Content-Security-Policy HTTP标头时尝试使用TinyMCE:

X-WebKit-CSP: default-src 'self'; script-src 'self' 'unsafe-eval'; img-src *; media-src *; frame-src *; font-src *; style-src 'self' 'unsafe-inline'; report-uri /:reportcspviolation
Run Code Online (Sandbox Code Playgroud)

我在工具 - JavaScript控制台中收到以下错误:

Refused to execute JavaScript URL because it violates the following Content Security Policy directive: "script-src 'self' 'unsafe-eval'".
 about:blank:1
Refused to execute inline event handler because it violates the following Content Security Policy directive: "script-src 'self' 'unsafe-eval'".
 test.xhtml:1
Refused to execute JavaScript URL because it violates the following Content Security Policy directive: "script-src 'self' 'unsafe-eval'".
 about:blank:1
Refused …
Run Code Online (Sandbox Code Playgroud)

javascript security google-chrome tinymce content-security-policy

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

.PO(gettext)文件的3路Git合并驱动程序在哪里?

我已经有了以下内容

[attr]POFILE merge=merge-po-files

locale/*.po POFILE
Run Code Online (Sandbox Code Playgroud)

.gitattributes同一个本地化文件(例如locale/en.po)已经在并行分支中修改时,我希望合并分支以正常工作.我目前正在使用以下合并驱动程序:

#!/bin/bash
# git merge driver for .PO files (gettext localizations)
# Install:
# git config merge.merge-po-files.driver "./bin/merge-po-files %A %O %B"

LOCAL="${1}._LOCAL_"
BASE="${2}._BASE_"
REMOTE="${3}._REMOTE_"

# rename to bit more meaningful filenames to get better conflict results
cp "${1}" "$LOCAL"
cp "${2}" "$BASE"
cp "${3}" "$REMOTE"

# merge files and overwrite local file with the result
msgcat "$LOCAL" "$BASE" "$REMOTE" -o "${1}" || exit 1

# cleanup
rm -f "$LOCAL" "$BASE" "$REMOTE" …
Run Code Online (Sandbox Code Playgroud)

git merge localization conflict gettext

15
推荐指数
2
解决办法
2443
查看次数

使用纯PHP验证两个文件是否相同?

TL; DR:我有一个CMS系统,它使用文件内容的SHA-1作为文件名来存储附件(不透明文件).如果我已经知道SHA-1哈希匹配两个文件,如何验证上传文件是否真的与存储中的文件匹配?我想要有很高的表现.

长版:

当用户将新文件上传到系统时,我计算上传文件内容的SHA-1哈希,然后检查存储后端中是否已存在具有相同哈希的文件.PHP将上传的文件放入/tmp我的代码运行之前,然后sha1sum针对上传的文件运行以获取文件内容的SHA-1哈希值.然后,我从计算出的SHA-1哈希计算扇出,并确定NFS安装目录层次结构下的存储目录.(例如,如果文件内容的SHA-1哈希是37aefc1e145992f2cc16fabadcfe23eede5fb094永久文件名,则/nfs/data/files/37/ae/fc1e145992f2cc16fabadcfe23eede5fb094.)除了保存实际文件内容外,我还在INSERTSQL数据库中为用户提交的元数据添加了新行(例如Content-Type,原始文件名) ,datestamp等).

我目前正在弄清楚的一个案例是新上传的文件具有与存储后端中的现有哈希匹配的SHA-1哈希.我知道事故发生的变化是天文数字低,但我想确定.(有关用例,请参阅https://shattered.io/)

由于两个文件名$file_a以及$file_b,如何快速检查,如果这两个文件具有相同的内容是什么?假设文件太大而无法加载到内存中.使用Python,我会使用,filecmp.cmp()但PHP似乎没有任何类似的东西.我知道fread()如果找到一个不匹配的字节就可以完成和中止,但我宁愿不写那个代码.

php performance file-io file-upload

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

CSP:如何允许给定URI前缀的不安全eval(Firefox)

我正在尝试使用MathJax作为我们的Web应用程序的一部分,该应用程序使用非常严格的内容安全策略(CSP).问题是MathJax被编码为使用eval()[确切地说,形式Function()],CSP默认不认为是安全的.

我目前正在使用以下CSP标头:

X-Content-Security-Policy: allow 'self'; img-src *; media-src *; frame-src *; font-src *; frame-ancestors 'none'; style-src *; report-uri '/:save-csp-violation';
Run Code Online (Sandbox Code Playgroud)

这导致MathJax 2.0代码失败,因为它使用Function().我试图Function()仅允许位于路径下相同原点的MathJax的unsafe-eval(ie )/:static/math/.为此,我尝试添加

unsafe-eval '/:static/math/*'
Run Code Online (Sandbox Code Playgroud)

使完整的标题看起来像

X-Content-Security-Policy: allow 'self'; img-src *; media-src *; frame-src *; font-src *; frame-ancestors 'none'; style-src *; report-uri '/:save-csp-violation'; unsafe-eval '/:static/math/*'
Run Code Online (Sandbox Code Playgroud)

但我仍然无法使用Firefox 13.0来运行代码.我收到Firefox Web Console(位于Tools - Web Developer)的错误消息:

[10:09:59.072] call to Function() blocked by CSP @ http://localhost:8080/:static/math/2.0/MathJax.js?config=TeX-AMS-MML_HTMLorMML:29
Run Code Online (Sandbox Code Playgroud)

但是,我没有收到"报告 - uri"的CSP报告.(如你所见,我目前正在通过自定义localhost端口运行测试而不使用SSL,以防有所不同.之前的冒号static不是拼写错误,我保留所有以冒号开头的路径部分供内部使用应用程序,所有用户内容可以自由定义其他URL.)

我对 …

javascript security firefox mathjax content-security-policy

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

HTTP标头:控制缓存和历史记录机制

我正在尝试找出最好的HTTP标头,以便为四个用例发送.我希望得到不依赖于用户代理/协议版本嗅探的标题,但我会接受,如果没有别的东西适合.所有URL都是通过完全自定义处理程序获取的,因此我可以根据需要选择所有标头,这完全是关于中间代理和用户代理.如果可能,这应该与HTTP/1.0和HTTP/1.1客户端兼容.如果存在多个解决方案,则最好的解决方案将是通过线路发送的最短解决方案.

静态公共内容

所有"静态公共内容"都是HTTP真正关注的东西:如果URL相同,则内容是相同的.我可以轻松地做到这一点:例如,我将用户个人资料图标放入http://domain.com/profiles/xyz/icon/1234abcd,其中"1234abcd"是图标文件内容的SHA-1.如果我将来更改为图标,我将创建一个新URL并修改应使用新图标的所有现有引用.什么是最好的标头声明这可以永久缓存并可以共享?我正在考虑一些事情:

Date: <current time>
Expires: <current time + one year>
Run Code Online (Sandbox Code Playgroud)

这是否足以允许用户代理和代理进行缓存?我需要Last-Modified还是Pragma

静态非公开内容

所有"静态非公开内容"都是静态的,但并非每个人都可以使用.实际上,此内容仅对选定的登录用户可用(会话保持会话cookie保持会话UUID).如果URL相同,则内容相同.但是,回应不公开.用例可以是在社交网络服务中与所选朋友共享的图像.我正在考虑一些事情:

Date: <current time>
Expires: <current time>
Cache-Control: private, max-age=<huge number>, s-maxage=0
Run Code Online (Sandbox Code Playgroud)

这是否足以允许用户代理缓存并禁用代理?我需要Pragma吗?

不稳定的公共内容

所有"易变的公共内容"都是易变的东西,可供所有人使用.当没有登录时,有点像http://slashdot.org/的首页.目的是允许在不变的URL中快速更新内容.请注意,我不想破坏用户代理历史记录机制(即,从易失性页面单击某些内容然后点击后退按钮不应导致从服务器获取易失性页面 - 但是,单击指向该服务器的链接首页应该从服务器获取资源).我正在考虑一些事情:

Date: <current time>
Expires: <current time>
Cache-Control: public, max-age=0, s-maxage=0
Run Code Online (Sandbox Code Playgroud)

这是否足以阻止缓存但允许历史记录机制(后退按钮)?我知道,如果我发送,Cache-Control: no-store, must-revalidate我可以强制重装,但这不是我想要的,因为这也会打破后退按钮.我需要Last-Modified还是Pragma

尽管这是公开的,但允许中间代理缓存它可能没有意义,因为它是不稳定的.

不稳定的非公开内容

所有"易变的非公开内容"都是易变的东西,并不是每个人(私人)都可以使用.当你登录时,有点像http://slashdot.org/的首页.目的是允许在不变的URL中快速更新内容.请注意,我不想破坏用户代理历史记录机制(即,从易失性页面单击某些内容然后点击后退按钮不应导致从服务器获取易失性页面 - 但是,单击指向该服务器的链接首页应该从服务器获取资源).我正在考虑一些事情:

Date: <current time>
Expires: <current time>
Cache-Control: …
Run Code Online (Sandbox Code Playgroud)

proxy history caching http browser-cache

12
推荐指数
1
解决办法
4010
查看次数

如何避免Zalgo文本在没有完全删除的情况下出血?

我们的网络服务受到了一些Zalgo文本的影响,我正试图为未来提出一个很好的解决方案.我们的策略是接受所有用户输入并将其保存在永久存储中(我们正确编码后端的输入,因此这部分是可以的).在输出阶段,我们通过带有白名单的过滤器/解析器运行原始用户输入,以避免XSS攻击和其他混乱.最近有些用户找到了Zalgo的世界,他们只是喜欢给其他人带来麻烦.

正如我所看到的,Zalgo文本只是一段从预期容器中泄漏出来的Unicode文本.因此,我认为自动删除所有复杂的组合字符是过于激烈的防御.有没有人知道一个CSS技巧来强制Zalgo文本包含在给定的父元素中而没有一些令人讨厌的副作用?

例如,如果我有

<section class="userinput">
... user input here ...
</section>
Run Code Online (Sandbox Code Playgroud)

如何确保用户输入不会泄漏到边界之外section.userinput?我猜overflow: hidden或者clip: rect(...)可能是正确的答案,但你对这个用例有什么更好的了解吗?我最好仍然可以使用section.userinput { max-height: 200vh; }或类似的东西,以避免用户创建人为的长评论.如果某些评论超过200vh,则应该只有一个滚动条来评论该评论.通常情况下,整个页面应该只有一个滚动条.

请注意,我只是想在视觉领域解决问题.我非常乐意接受任何有效的UTF-8序列作为用户输入,如果一个混乱的用户评论导致该用户评论看起来像垃圾,我很好.我只是想避免那个垃圾溢满了整个地方.具体来说,我不打算在显示之前阻止zalgo文本过滤类似zalgo的文本.

html css unicode zalgo

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