在另一个问题中指出,将一个PHP函数调用的结果包含在括号中可以以某种方式将结果转换为一个完全成熟的expression式,从而以下工作: <?php error_reporting(E_ALL | E_STRICT); function get_array() { return array(); } function foo() { // return reset(get_array()); // ^ error: "Only variables should be passed by reference" return reset((get_array())); // ^ OK } foo(); 我试图在文档中find任何明确无误地解释这里发生的事情。 与C ++不同,我不太了解PHP语法及其对语句/expression式的处理以便自己派生。 有关此行为的文档中是否有隐藏的内容? 如果没有,其他人可以解释而不诉诸假设? 更新 我首先发现这个EBNF声称代表PHP语法,并试图自己解码我的脚本,但最终放弃了。 然后, 使用phc生成两个foo()变体的.dot文件,我使用以下命令为这两个脚本生成了 AST图像: $ yum install phc graphviz $ phc –dump-ast-dot test1.php > test1.dot […]
我正在运行一个网站,并且有一个评分系统,可以让你知道你玩游戏的次数。 它使用哈希来certificatehttp请求得分的完整性,所以用户不能改变任何东西,但是因为我担心可能发生,有人发现他们不需要改变它,他们只需要得到高分, http请求,标题和所有。 以前我被禁止保护免受这种攻击,因为它被认为不太可能。 但是,现在已经发生了,我可以。 http请求来自flash游戏,然后通过phpvalidation,php将其input到数据库中。 我非常确定随时可以解决这个问题,但我不确定如何实施它们。 什么是build立一个nonce系统的一个通用而安全的方法?
如何防止多个客户端使用相同的会话ID? 我问这是因为我想添加一个额外的安全层来防止会话劫持在我的网站上。 如果黑客以某种方式计算出另一个用户的会话ID,并使用该SID发出请求,如何检测到在服务器上共享单个SID的不同客户端,然后拒绝劫持尝试? 编辑 我经过仔细考虑,已经接受了Gumbo的回答,因为我已经意识到由于无状态HTTP协议的限制,我所要求的是不可能的。 我忘了HTTP也许是最基本的原则,现在我想这个问题似乎有些微不足道。 让我详细说明我的意思: 用户A在example.com上login后,为了简单起见,他给了一些随机的会话ID,让它成为'abc123'。 此会话ID在客户端以cookie的forms存储,并通过服务器端会话进行validation,以确保login的用户在从一个网页移动到另一个网页时保持login状态。 如果HTTP不是无状态的,那么这个cookie当然不需要存在。 因此,如果用户B窃取用户A的SID,并在他的计算机上创build一个值为“abc123”的cookie,他将成功劫持用户A的会话,但服务器根本无法合法识别用户B请求与用户A的请求有任何不同,因此服务器没有理由拒绝任何请求。 即使我们要列出在服务器上已经激活的会话,并尝试查看是否有人正在访问已经处于活动状态的会话,我们如何确定是另一个非法访问会话的用户而不是同一个用户谁已经login了一个会话ID,但只是试图做出另一个请求(即导航到不同的网页)。 我们不能。 检查用户代理? 可以欺骗 – 但作为深度防御措施仍然是好的。 IP地址? 可以根据正当的理由进行更改,但是我build议不要检查IP地址,而应该检查IP的前两个八位字节,即使数据规划networking中的用户因为完全合法的原因而经常有不断变化的IP通常只有IP的最后两个八位字节发生变化。 总而言之,无状态HTTP谴责我们永远无法完全保护我们的网站免遭会话劫持,但良好的做法(如Gumbo提供的)将足以防止绝大多数的会话攻击。 试图通过拒绝同一个SID的多个请求来保护会话免受劫持是简单的可笑的,并且会破坏会话的整个目的。
由于我的问题越来越长,我决定重写整个问题,使其更好,更短。 我在8GB内存的专用服务器上运行我的网站。 我完全知道,我需要提高php.ini设置的内存限制。 我已经把它从128M设置为256M和-1。 问题仍然存在。 致命错误:内存不足(已分配786432)(试图分配24576字节)在D:\ www \ football \ views \ main.php在81行 内存不足没有意义,因为它表示只分配了786432个字节,并且需要更多的24576个字节。 786432字节只有768千字节,相当小。 提示 错误发生在一个非常随机的线上。 第81行不总是出错。 在高峰期,Apache只需要大约500MB的内存。 我还有6GB的空间。 没有无限循环。 该脚本需要1,042,424字节。 从echo memory_get_peak_usage();获取这个数字echo memory_get_peak_usage(); MySQL的结果集很小(最多12行,纯文本,没有斑点数据) ( 重要 )如果我每两天重新启动Apache一次,错误消失了。 当Apache运行超过2天时,通常会发生这种情况。 我已经包括了分析脚本,你可以在这里得到它。 这个专用服务器纯粹只用于运行一个网站。 这个网站是一个高stream量的网站,平均每分钟有1000个访问者。 在高峰时间,将有1700到2000名访问者同时访问。 服务器规格 操作系统:Windows 2008 R2 64位 CPU:Intel Core i5-4核心 内存:8 GB Apache 2.2 PHP 5.3.1 存储:2 x 1 TB硬盘 带宽:每月10 TB 解 […]
这可能是一个愚蠢的问题,但我找不到在项目树(PhpStorm IDE)中刷新文件夹内容的选项。 这(真的是基本)function缺失? 我知道,内容会自动刷新,但在某些types的文件夹中,文件生成和更改通常不起作用。
我正在使用一个简单的PHP库通过HTTP将文档添加到SOLR索引。 目前有3台服务器: 运行索引作业的PHP框 一个数据库框中保存的数据被索引 Solr盒子。 在80个文档/秒(100万个文档)中,我注意到PHP和solr盒上的networking接口的中断率非常高(2000 / sec;而且graphics几乎完全相同 – 当中断速度在PHP框峰值,它也刺激Solr框),但在数据库框(300 /秒)更less。 我想这仅仅是因为我打开并重用了一个到数据库服务器的连接,但是由于Solr客户端库的写入方式,每一个Solr请求都是通过cURL打开一个新的HTTP连接。 所以,我的问题是: cURL可以打开Keepalive会话吗? 重用连接需要什么? – 和重复使用cURL句柄资源一样简单吗? 我需要设置任何特殊的cURL选项吗? (例如强制HTTP 1.1?) 有没有curl keepalive连接的陷阱? 这个脚本一次运行几个小时; 我将能够使用单个连接,还是需要定期重新连接?
我有一个接受一个PDO对象作为参数的方法,以允许用户使用现有的连接,而不是方法来打开一个新的,并节省资源: public static function databaseConnect($pdo = null) { 我知道is_object()来检查参数是否是一个对象,但我想检查$pdo是否是一个PDO对象,而不是一个对象。 因为用户可以很容易地input(错误地)一个不同types的对象,一个mysqli或类似的东西,整个脚本将会分开。 简而言之:如何检查特定types对象的variables?
我正在寻找SSH通过PHP。 什么是最好的/最安全的方式去呢? 我知道我可以这样做: shell_exec("SSH user@host.com mkdir /testing"); 还有什么更好的? 这感觉很“调皮”:)。
我不喜欢PHP或意大利面条代码,或者类似的东西,但是根据我的经验,WordPress的工作非常好,组织良好,我从来没有遇到过任何难以理解的代码。 文档非常详尽,任何安全漏洞都在几秒钟内得到修复,而且“正常工作”。 更不用说,它做了一切,它有一个真棒插件系统。 哦,和“循环”是真棒。 我从来没有任何问题做简单的修改代码或主题。 你们可以给出一些你不喜欢的具体例子,或者你会有什么不同的编程方式吗? 我只是不明白为什么会有这么糟糕的说唱。 我希望我自己的软件能够很好地工作,并拥有许多function,而且看起来不错。
我正在尝试在我的网站上实施PayPal。 我使用这个类: http : //www.micahcarrick.com/php-paypal-ipn-integration-class.html 现在我正在使用PayPal沙盒进行testing。 这是问题: 用户付款 – 好的 用户成功返回到我的网站 – 好的 几秒钟后,PayPal使用IPN拨打我的网站 – 确定 我的class级成功validation传入的IPN数据。 PayPal返回“payment_status:待定” 我不知道为什么PayPal IPN回拨“等待”的付款状态? 有谁知道我在做什么错?