file_get_contents() 与使用 http/1.1 的上下文显着降低下载速度

2023-11-24

使用每个图像下载下面的代码) file_get_contents() )平均需要 8-15 秒......

如果我不在 file_get_contents() 上使用上下文,则图像下载时间不到一秒。

如果我将 $opts 更改为,下面,我将获得与 file_get_contents() 相同的性能,而无需上下文,处理 2,500 个图像大约需要 13 秒。

$opts = array(
    'http'=>array(
        'protocol_version'=>'1.1',
        'method'=>'GET',
        'header'=>array(
            'Connection: close'
        ),
        'user_agent'=>'Image Resizer'
     )
); 

复制:

    $start_time = mktime();
$products = array(
        array( 'code'=>'A123', 'image_url'=>'http://www.google.com/intl/en_ALL/images/srpr/logo1w.png' ),
        array( 'code'=>'A124', 'image_url'=>'http://www.google.com/intl/en_ALL/images/srpr/logo1w.png' ),
        array( 'code'=>'A125', 'image_url'=>'http://www.google.com/intl/en_ALL/images/srpr/logo1w.png' ),
        array( 'code'=>'A126', 'image_url'=>'http://www.google.com/intl/en_ALL/images/srpr/logo1w.png' ),
        array( 'code'=>'A127', 'image_url'=>'http://www.google.com/intl/en_ALL/images/srpr/logo1w.png' ),
        array( 'code'=>'A128', 'image_url'=>'http://www.google.com/intl/en_ALL/images/srpr/logo1w.png' ),
        array( 'code'=>'A134', 'image_url'=>'http://www.google.com/intl/en_ALL/images/srpr/logo1w.png' ),
        array( 'code'=>'A135', 'image_url'=>'http://www.google.com/intl/en_ALL/images/srpr/logo1w.png' ),
        array( 'code'=>'A146', 'image_url'=>'http://www.google.com/intl/en_ALL/images/srpr/logo1w.png' ),
        array( 'code'=>'A165', 'image_url'=>'http://www.google.com/intl/en_ALL/images/srpr/logo1w.png' )
    );

    if ( count( $products ) > 0 ) {
        $opts = array(
            'http'=>array(
                'protocol_version'=>'1.1',
                'method'=>'GET',
                'user_agent'=>'Image Resizer'
            )
        ); 
        $context = stream_context_create($opts);
        $def_width = 100;
        $max_width  = $def_width;
        foreach( $products as $product ) {
            $code = $product['code'];
            $folder = substr( $code, 0, 3 );
            echo( 'Looking at: ' .$product['code'] ."<br />" );
            $file = '/tmp/' .$folder .'/' .$code .'_' .$def_width .'.jpg';
            $filemtime = @filemtime($file);
            $gen_file = true;
            if ( $filemtime !== false ) {
                $file_age = (time() - $filemtime);
                if ( $file_age <= 300 ) {
                    $gen_file = false;
                }
            }
            echo( '&nbsp;&nbsp;&nbsp;&nbsp;File not cached or cached file has expired<br />' );
            if ( $gen_file ) {
                echo( '&nbsp;&nbsp;&nbsp;&nbsp;Getting File...');
                $imgStr = file_get_contents( $product['image_url'], false, $context );
                $img = @imagecreatefromstring($imgStr);
                if ( is_resource( $img ) ) {
                    echo( 'DONE' .'<br />' );
                    $image_x = imagesx($img);
                    $image_y = imagesy($img);
                    if ( $def_width >= $image_x ) {
                        $def_width = $image_x;
                    }
                    echo( '&nbsp;&nbsp;&nbsp;&nbsp;Calculating Scale<br />' );
                    $ts = min( $max_width/$image_x,$max_width/$image_y);
                    $thumbhght = $ts * $image_y;
                    $thumbwth = $ts * $image_x;

                    $thumb_image_resized = imagecreatetruecolor( $thumbwth, $thumbhght);
                    imagecopyresampled($thumb_image_resized, $img, 0, 0, 0, 0, $thumbwth, $thumbhght, $image_x, $image_y );
                    echo( '&nbsp;&nbsp;&nbsp;&nbsp;Checking For Directory<br />' );
                    if ( !is_dir( '/tmp/' .$folder ) ) {
                        mkdir( '/tmp/' .$folder );
                    }
                    echo( '&nbsp;&nbsp;&nbsp;&nbsp;Writing File<br />' );
                    $new_file = '/tmp/' .$folder .'/' .$code .'_' .$def_width .'.jpg';

                    imagejpeg( $thumb_image_resized, $new_file, 100);
                    echo( '&nbsp;&nbsp;&nbsp;&nbsp;DONE<br />' );

                    imagedestroy($img);
                    imagedestroy($thumb_image_resized);
                } else {
                    echo( 'Problem Getting Image<br />' );
                    die();
                }
            } else {
                echo( '&nbsp;&nbsp;&nbsp;&nbsp;Already Exists<br />' );
            }
        }
    }
    $end_time = mktime();
    echo( 'Completed In...' .($end_time - $start_time ) .' seconds(s)<br />' );

默认情况下,HTTP 1.1 请求是管道式的。如果您不“连接:关闭”,则它假定“连接:保持活动”,然后您必须等待连接超时(因为您从未明确关闭它),然后才能开始下一个循环。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

file_get_contents() 与使用 http/1.1 的上下文显着降低下载速度 的相关文章

  • 使用 MYSQL 将 h:mm pm/am 时间格式插入数据库

    我正在尝试将以 h mm am pm 格式写入的时间插入到存储为标准 DATETIME 格式 hh mm ss 的数据库中 但我不知道如何将发布的时间转换为标准格式所以数据库会接受它 这是我到目前为止一直在尝试的 title POST in
  • 如何将图像从 Android 应用程序上传到网络服务器的特定文件夹中

    如何将图像从 android 移动到 Web 服务器上的指定文件夹 这是我的安卓代码 package com example bitmaptest import java io ByteArrayOutputStream import ja
  • 更改 Woocommerce 中“我的帐户”页面上的标题

    我见过大量有关如何使用 WooCommerce 我的帐户仪表板重新排序 更改导航和页面的示例 但我一生都无法弄清楚如何更改每个部分的主要标题 我的帐户 订单 下载 地址等 我已经搜索过模板 但没有任何乐趣 我尝试使用条件 php 注释来回显
  • Laravel Auth:attempt() 不会持久登录

    我在网上找到了许多有类似问题的资源 但似乎没有一个解决方案可以解决我的问题 当我使用以下代码登录用户时 一切看起来都很好 email Input get email password Input get password if Auth a
  • 在 PHP 中包含 PHP 文件

    我有一个网站 它运行 PHP if 语句来根据附加文件的类型 即 Jpg Txt MP4 显示内容 所以我显示 TXT 文件的代码是 if post attachment txt display attachment div class d
  • CodeIgniter 控制器 - JSON - AJAX

    我正在尝试通过 AJAX 使用 CodeIgniter 发送表单构建 并尝试使用 JSON 获取响应 但是 我只在打开开发人员选项卡时看到响应 我什至不确定这是否实际上是响应 因为它显示了两个 json 数据 它所显示的只是加载旋转器 然后
  • 在我的 index.php 中加载 CSS 和 JS 等资源时出现错误 403

    我使用的是 Linux Elementary OS 并在 opt 中安装了 lampp My CSS and JS won t load When I inspect my page through browser The console
  • 获取字符串中的最后一个整数

    我需要隔离包含多个整数的字符串中最新出现的整数 我怎样才能得到23代替1 for lastnum1 text 1 out of 23 lastnum1 this gt getEval eregi replace out of text 你可
  • 访问sendBeacon发送的数据

    文档表明sendBeacon通过发送其数据HTTP POST request 但在 PHP 中 POST变量似乎是一个空数组 这是我的 JavaScript 代码 navigator sendBeacon beacon log php My
  • 使用 Instagram Basic Display API 时出现“无效平台应用程序”错误

    我正在尝试使用 Instagram Basic 显示 API 但是当我发布授权代码以获取访问令牌时 我不断收到以下错误 error type OAuthException 代码 400 error message 平台应用无效 我正在遵循此
  • 对 SimpleXML 数据进行排序和分组

    我正在对 XML 文件中的出版物数据进行排序和分组 我目前使用的方法效果很好大部分情况下 尽管我觉得有一种更有效的方法来完成我想要完成的任务 以下是目标节点的示例
  • 重写 URL,将 ID 替换为查询字符串中的标题

    我对 mod rewrite 很陌生 但我做了一些搜索 但找不到这个问题的答案 我有一个网站 它只有一个 PHP 页面 根据查询字符串中传递给它的 ID 提供数十页内容 我想重写 URL 以便此 ID消失并替换为从数据库中提取的页面标题 例
  • Ebay api GetSellerList,解析响应 XML

    我正在使用 eBay 交易 api 来获取当前列出的卖家股票 我正在使用 GetSellerList 调用 我在解析 xml 时遇到问题 然后将其插入到网站商店中 这是 xml 请求
  • Codeigniter - 出现 404 Not Found 错误

    我们在 godaddy 有两个托管套餐 我们的实时网站使用以下 htaccess 文件运行良好 无需在 url 中使用 index php 即可访问网站 RewriteEngine On RewriteCond REQUEST FILENA
  • PHP 中的引用

    我正在编写一个自定义博客引擎 并且希望拥有类似于 Wordpress 的引用 我可以查看 WordPress 源代码 但我真的更喜欢某种教程 但到目前为止我还没有找到 有没有关于在 PHP5 中实现 trackbacks 或 pingbac
  • 如何在 phalcon 框架中同时连接多个数据库在模型类中同时使用两个而不仅仅是一个

    在我的代码中我有两个数据库ABC and XYZ 我想在同一模型中使用两个数据库 而不是 phalcon 中的解决方案是什么 如何为此实现多个数据库连接 one
  • 如何删除文件

    我们有一个脚本 scripts ourscript php和一个文件 media movie1 flv 当我们运行时 我们如何删除这个文件ourscript php Using unlink http php net manual en f
  • 如何清除 APC 缓存而不使 Apache 崩溃?

    如果 APC 存储大量条目 清除它们会导致 httpd 崩溃 如果 apc clear cache user 花费的时间超过 phps max execution time 调用 apc clear cache 的脚本 将在之前被 php
  • 如何使用 php 将 *.xlsb 转换为数组或 *.csv

    我正在尝试转换 xlsb文件到php array or csv文件 或至少 xls 我尝试使用PHPExcel 但看起来它无法识别该文件中的内容 我注意到 你可以重命名 xlsb文件到 zip文件 然后使用命令行解压缩unzip zip 之
  • 使用 PHP 将 latin1_swedish_ci 转换为 utf8

    我有一个数据库 里面充满了类似的值 Dhaka 应该是 Dhaka 因为我在创建数据库时没有指定排序规则 现在我想修复它 我无法从最初获取数据的地方再次获取数据 所以我在想是否可以在 php 脚本中获取数据并将其转换为正确的字符 我已将数据

随机推荐

  • 使用 R 查找字符串中的重复模式

    我有一个很大的文本 其中包含以下表达式 aaaahahahahaha that was a good joke 处理后 我想要 aaaaahahahaha 消失 或者至少将其更改为简单 ha 目前 我正在使用这个 gsub 1 str 当带
  • JQuery:如何找出一个元素有多少个子元素?

    如何使用 jQuery 找出一个元素有多少个子元素 假设我有以下结构 div div div div div div div div div div div div div div 我想知道 div 元素 container 有多少个子元素
  • 在 python 解释器提示符中添加颜色,无法正确换行

    我希望在终端中有一个更丰富多彩的 Python 提示符 只是为了便于阅读 我目前有 sys ps1 033 96m gt gt gt 033 0m sys ps2 033 96m 033 0m in my PYTHONSTARTUP文件 它
  • 使用“void_t”检查类是否具有具有特定签名的方法

    此刻 我是使用此方法检查类是否具有具有特定签名的方法 参加后Walter E Brown 的元编程 CppCon2014 演讲 我开始想知道是否void t可以在这种特殊情况下使用 以使代码更清晰 更具可读性 但是我很难思考void t 到
  • Angular 2 中路线更改时的结束间隔

    我在路由器插座内的 Angular 2 组件中启动一个计时器 setInterval gt 10000 当我离开嵌入组件的路线时 计时器不会退出 我怎样才能做到这一点 您可以从此挂钩中清除间隔 我的是从组件 视图控制的 export cla
  • 如何检查c中是否有被零除的情况

    include
  • ggplot2 条形图上的舍入百分比标签

    q1 lt qplot factor Q1 data survey geom histogram fill factor Q1 ylim c 0 300 options digits 2 q1 geom bar colour black s
  • 如何使用线程执行单元测试? [复制]

    这个问题在这里已经有答案了 执行摘要 当线程中抛出断言错误时 单元测试不会终止 这是有道理的 因为不应该允许一个线程使另一个线程崩溃 问题是我该如何 1 在第一个辅助线程崩溃时使整个测试失败 或者 2 循环并在每个线程全部完成后确定它们的状
  • 如何通过Fiddler捕获Visual Studio Code流量?

    如何通过Fiddler抓取VS Code流量 我运行了我的 Fiddler 看起来工作正常 它可以捕获浏览器的流量 但不能捕获 VS Code 的流量 如果有人能给我解决方案 我真的很感激 Thanks 假设您正在使用一些 REST 客户端
  • 使用 typescript 创建猫鼬模型 - 子文档

    我正在使用打字稿实现猫鼬模型 如本文所述 https github com Appsilon styleguide wiki mongoose typescript models并且不确定当您使用子文档数组时这会如何翻译 假设我有以下模型和
  • 如何检查存储过程是否存在?

    我在网上搜索了一下 发现了一个post它使用以下代码片段来检查存储过程是否存在 select from USER SOURCE where type PROCEDURE and name my stored procedure 还有其他方法
  • Django,使用 ModelForm 更新用户配置文件

    我正在尝试为用户的个人资料显示一个简单的 ModelForm 并允许用户更新它 这里的问题是我的逻辑存在某种缺陷 在成功调用 form save 后 旧值显示在页面上 直到刷新才会显示适当的值 这里有什么问题吗 login required
  • 如何使用 Swift 4 在 UICollection 视图中进行多项选择

    我是 swift 的新手 从头开始构建 iOS 应用程序 使用 swift 4 想要执行如下操作 1 在UICollectionView中实现多单元格选择 2 将选定的单元格数据传递到服务器 请任何人都可以帮助我 该怎么做 告诉我执行此操作
  • 如何在 Windows 上获取硬件 MAC 地址

    我正在尝试从 NIC 检索 MAC 地址 有多种方法可以获取它 本文介绍了最常见的方法 http www codeguru com Cpp I N network networkinformation article php c5451 我
  • 单击传单标记即可转到 URL

    在 R 的传单包中 有没有办法单击标记并定向到 URL 这是JS解决方案 在 R 中 添加带有 URL 的弹出窗口 library leaflet content lt paste sep br b a href http www samu
  • 如何在 mac os x yosemite (10.10) 上安装 mcrypt 扩展

    我已将 Mac OS X 更新到 Yosemite 但这样做会覆盖我的所有开发环境 所以现在 要在本地 apache 上运行 Laravel 4 我需要安装 Mcrypt 扩展 但我尝试的一切都失败了 即使是在 OS X Mavericks
  • Android 蓝牙 VS 低功耗蓝牙

    我正在尝试创建一个应用程序 只要智能手机正在运行 就需要交换少量数据 只是为了通知设备足够接近 据我了解 传统的蓝牙会消耗大量电池 因此打开几个小时是不可行的 我正在考虑 BLE 但仍然担心电池容量 Q0 是否可以在手机运行时就开启BLE
  • JQuery DatePicker 背景颜色

    我正在使用 JQuery DatePicker 的示例链接文本 在我的 asp net 页面上 但是 日期选择器的背景颜色是白色 我不知道如何改变这个 更改为默认颜色 我的asp net页面背景页面是白色的 可能是这个原因 任何帮助将不胜感
  • 如何在模板中迭代 Django CHOICES - 不使用表单或模型实例

    我目前使用选项来定义月份列表和星期几列表 我想在我的模板中显示这些选择列表 而不必与特定实例或表单相关 例如 在我的模型中 MONTH CHOICES 01 January 02 February 03 March etc DAY CHOI
  • file_get_contents() 与使用 http/1.1 的上下文显着降低下载速度

    使用每个图像下载下面的代码 file get contents 平均需要 8 15 秒 如果我不在 file get contents 上使用上下文 则图像下载时间不到一秒 如果我将 opts 更改为 下面 我将获得与 file get c