PHP如何同时管理请求
今天我只是想知道
PHP如何同时处理请求.由于
PHP可以同时处理多个请求,我想到了PHP脚本中可能存在的安全漏洞或错误,我只是想知道我是否有点太害怕了.
因此,在同时有100个请求并且apache被配置为将它们转发到PHP的情况下. PHP将如何处理以下示例(我已经在某些现实世界的应用程序中以某种方式看到的所有示例) 所有示例都彼此相似. (我不想要更好的方法来解决这些案例) 示例1:创建缓存 <?php if (!file_exists('my_cache.txt')) { // do something slow (taking a second or so) file_put_contents('my_cache.txt',$cache); } 假设我们有大约100个请求.缓存是否可能生成100次并在缓存文件中存储100次? 示例2:将条目写入缓存 <?php writeItemToDatabase($myItem); if (countAllItemsInDatabase() > 100) { $items = readAllItemsFromDatabase(); deleteAllItemsFromDatabase(); // Process items } 由于“deleteAllItemsFromDatabase”函数,此示例有点愚蠢.如果此脚本将并行执行,则可能发生以下情况: >两个用户同时处理所有项目 例3:虚拟货币 <?php if ($user->getMoney() > 100) { $user->decreaseMoney(100); $user->addItem($itemToBuy); } 如果脚本可以同时运行,则此示例存在很大的安全问题.如果我快速点击此应用程序的“购买”按钮,即使我的用户帐户中没有剩余资金,我也可以购买商品. 这个问题 我想知道我是否有点偏执于编写脚本以防止此类问题,或者这些示例是真正的问题吗? 并且 – 对于极少数情况 – 如果我需要编写一些处理过的串行动作(如那些示例中),是否有PHP函数/扩展来确保一次只处理一个脚本部分,如: <?php $semaphore->lock(); // Do something dangerous $semaphore->unlock(); 解决方法
https://github.com/mpapec/simple-cache/blob/master/example3.php
???? require "SafeCache.class.php"; // get non blocking exclusive lock $safe = new SafeCache("exclusive_lock_id"); if ( $safe->getExclusive() ) { print "we have exclusive lock now<br>"; // ... print "releasing the lock<br>"; $safe->doneExclusive(); } 另外,请查看安全缓存生成的其他示例. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |