- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我正在尝试在 PHP 中创建一个即发即弃的方法,这样我就可以POST
数据到 Web 服务器,而不必等待响应。我读到这可以通过使用 CURL
来实现,如下面的代码所示:
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_fields);
curl_exec($ch);
curl_close($ch);
但是我认为它并不像我预期的那样有效。例如,如果我发送请求的 URL 有错误,它会导致我的脚本也抛出错误。如果火了就忘了,我希望这种情况不会发生。
任何人都可以告诉我我是否做错了什么或提供替代建议。我在本地使用 Windows,在开发、暂存和生产环境中使用 Linux。
更新
我在这里找到了替代解决方案:http://blog.markturansky.com/archives/205
我已经将它整理成下面的代码:
function curl_post_async($url, $params = array())
{
// create POST string
$post_params = array();
foreach ($params as $key => &$val)
{
$post_params[] = $key . '=' . urlencode($val);
}
$post_string = implode('&', $post_params);
// get URL segments
$parts = parse_url($url);
// workout port and open socket
$port = isset($parts['port']) ? $parts['port'] : 80;
$fp = fsockopen($parts['host'], $port, $errno, $errstr, 30);
// create output string
$output = "POST " . $parts['path'] . " HTTP/1.1\r\n";
$output .= "Host: " . $parts['host'] . "\r\n";
$output .= "Content-Type: application/x-www-form-urlencoded\r\n";
$output .= "Content-Length: " . strlen($post_string) . "\r\n";
$output .= "Connection: Close\r\n\r\n";
$output .= isset($post_string) ? $post_string : '';
// send output to $url handle
fwrite($fp, $output);
fclose($fp);
}
这个似乎更适合我。
这是一个有效的解决方案吗?
最佳答案
是的,如果您不关心您所调用的 URL 的响应,那么使用套接字是可行的方法。这是因为套接字连接可以在发送请求后直接终止而无需等待,而这正是您所追求的 - 即发即弃。
不过有两个注意事项:
绝对值得检查套接字是否可以打开,以防止脚本在失败时提示:
$fp = fsockopen($parts['host'], $port, $errno, $errstr, 30);
if ( ! $fp)
{
return FALSE;
}
值得链接到您现在使用的 fsocket() 脚本的原始来源:
http://w-shadow.com/blog/2007/10/16/how-to-run-a-php-script-in-the-background/
关于PHP Fire and Forget POST 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14587514/
我试图创建 Kindle Fire 模拟器来测试 Kindle Fire 平板电脑、Fire 手机和亚马逊电视的应用程序。我已经按照文档进行操作,但无法为这些创建模拟器。谁能告诉我亚马逊是否支持模拟器
以下代码运行大约需要 20 秒。然而,取消注释 do! 后只用了不到一秒的时间。为什么会有这么大的差异? 更新:使用ag.Add时需要9秒。我已经更新了代码。 open FSharpx.Control
我曾经将图像保存到 fire base storage 它在所有 android 设备上工作但在 amazon fire 上,它抛出错误。 这是日志 W/GooglePlayServicesUtil:
我想为 Fire TV 应用程序进行 Google 登录。不幸的是,我不能为此使用 Google Play 服务,所以我需要解决这个问题。我唯一能想到的就是让登录屏幕成为 uiwebview Goog
我们有 Gem Fire 6 数据,想将其迁移到 Gem Fire 8 数据。为此有哪些可能的选择?我们需要这个,因为我们的客户可能不乐意丢失 Gem Fire 6 服务器中的数据。请指教。 最佳答案
我是 Quartz 的新手,一直在重复作业运行。它们是由两个触发时间重叠的触发器引起的。 是否有任何 Quartz 的“开箱即用”功能可以防止重复触发具有多个附加触发器的同一作业? 或者也许有一些第三
我一直在尝试测试事件,昨天我让它工作了。那是在我开始重构测试代码以防止它过于重复之前。我添加了 setUp 方法调用以使用 ModelFactories 生成假数据。这是昨天在每个测试用例中完成的,并
我想在我关注文本区域之前触发一个事件(即在键盘出现在 iOS 上之前)。 这可能吗? 我处理焦点的代码在这里: $(document).on('focus', 'textarea', function
我使用 HTML5 和 JavaScript 开发了 Fire TV 应用程序。这里我需要识别当前访问的设备是什么。 Amazon Fire TV 或 Amazon Fire Stick。 如何使用
Angular 版本: @angular-devkit/architect 0.803.22 @angular-devkit/build-angular 0.803.22 @a
python包Fire对于从命令行启动 python 脚本非常有用。一件常见的事情是有由多个单词组成的参数,例如可以用 3 种通用方式编写的 cat 的名称: nameofcat name_of_ca
我正在尝试使用 javascript 检测我的网站是否在 kindle fire 移动设备上运行。我试过使用 navigator.userAgent 和 navigator.appVersion 但我
hi This : var fees=document.getElementById("conn"); var btn=document.getE
我在网上查过,但找不到任何东西: 如何摆脱在我正在观看的电影上显示的这个通知圈? 最佳答案 这个东西来自 ES 文件浏览器 只需进入此应用程序 > 设置 然后有一个选项说记录 float 窗口,你只需
我需要知道当用户通过新的 Fullscreen API 进入全屏模式时会触发哪些(DOM)事件。我尝试了这个片段,但它没有触发: jQuery('body').on('fullScreenChange
我试图通过在加载页面时隐藏 webView 来在不同网页的加载之间进行转换。但是,我发现一些图像密集型网站导致 webViewDidFinishLoading 过早触发,当我在此时显示 webView
我的应用程序使用 MVVM 模式。我的 TextBox绑定(bind)到我的 ViewModel 的属性(类型字符串)。 何时 TextBox 的内容通过用户输入更改,我想执行一些验证。 所以,目前,
有谁知道如何检测该应用程序是否在Kindle Fire上运行? 如果在Kindle Fire上运行,我的应用程序需要关闭一些功能,并且我想使用与Google Marketplace相同的版本。 最佳答
如何告诉 jQuery 仅触发一次回调函数? $(document).on('ready turbolinks:load', function callback_function() { co
使用新的HTML音频标签: Your browser does not support the audio element. 在我尝试过的所有浏览器(IE v10,Chrome v23,O
我是一名优秀的程序员,十分优秀!