问题标签 [stream-wrapper]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
php - 使用自定义流包装器作为 PHP 的 http:// 流包装器的测试存根
我正在编写一个自定义流包装器,以用作使用内置http://
流包装器的 HTTP 客户端类的单元测试中的存根。
具体来说,我需要'wrapper_data'
通过调用stream_get_meta_data
自定义流包装器创建的流来控制键中返回的值。不幸的是,关于自定义流包装器的文档很糟糕,而且 API 似乎不直观。
自定义包装器中的什么方法控制元wrapper_data
响应?
var_dump(stream_get_meta_data($stream));
使用底部的类,当我在使用自定义包装器创建的流上时,我只能得到以下结果......
但是我需要诱使包装器在元数据检索中产生类似以下内容,以便我可以测试客户端类对真实http://
流包装器返回的数据的解析......
这是我目前用于自定义包装器的代码:
php - 带有包含或评估的自定义流包装器?
概述
我目前正在编写模板引擎。它甚至支持多种“格式”。目前它可以解析.php
文件和.tpl
(特定于这个引擎)。
我会给你一个两者的小例子,只是为了给你一个想法。
模板.php:
这基本上只是一个标准的 PHP。
模板.tpl
这种模板“语言”简单地被翻译成上面的 PHP。
比较
评估()
目前这些模板是使用eval()
.
临
- 我不必更改任何代码
魂斗罗
- 当模板中发生错误时,您只会收到一条无用的错误消息,它不会告诉您错误发生在哪个文件中,有时行号甚至是错误的。
- 安全?模板文件只需要可读吗?
- 很难调试代码。
- 代码更难理解
- 更多的 .. ?
流包装器和 include()
我最近阅读了 php 中的流包装器。你甚至可以创建自己的。另一个解决方案eval
是为每个模板“格式”创建自定义流包装器并使用 include 来解析模板。
这有以下(潜在的)缺陷:
临
- 可以解决在错误消息中显示错误文件/行号的问题(有没有人遇到过这个问题?)
- 您可以完全按照希望处理的方式处理模板文件。完全控制。
魂斗罗
allow_url_(fopen|include)
必须开启?- 它很慢吗?(也很
eval()
慢?) - 在安全方面没有收获。include 与 eval 的作用基本相同。
- 更多的 ... ?
编辑:缓存的解析文件和 include()
第三种选择是将模板解析为 PHP 代码并缓存它们(如 @Jen-YaKovalev 所建议的那样)。
临
- 包括缓存
魂斗罗
- 如果在包含渲染模板时发生错误并且发生错误,则错误消息不会将您指向正确的文件/最终会显示错误的行号。
- 您需要一个额外的
tmp/
目录来保存已解析的文件。您需要 PHP/webserver 的写入权限。会更不安全,因为黑客会更容易附加一些恶意代码。
编辑:流过滤器和包含('php://filter')
最近发现了以下 php.net 页面:
php://filter:
http://php.net/manual/en/wrappers.php.phpstrea_filter_register
http://fr2.php.net/manual/en/function.stream-filter-register.php
这将是解决此问题的另一种可能性。使用include('php://filter/read=filtername/resource=file.php')
,我可以包含一个filtername
在执行之前首先通过过滤器的文件。
临
- 不需要像流包装器那么多的代码
魂斗罗
- 不像流包装器(缓存?)
- 安全?
- 速度?
问题
- 有使用流包装器解析模板文件或类似文件的经验吗?
- 还有其他解决方案吗?
- 有更多的专业人士和反对者吗?
- 你会推荐哪一个?
php - PHP Stream Wrapper 元数据
Hello, world!
我需要能够将信息从自定义流包装器传递到使用它的代码,但我一直遇到一些麻烦。最好的选择似乎是使用stream_get_meta_data()
,但我无法在文档中找到允许我设置包装器特定wrapper_data
数据的方法。
解决这个问题的最佳方法是什么?
php - 使用流包装器遍历 S3 存储桶
我正在尝试列出我的 Amazon S3 存储桶中的所有项目。我有几个嵌套目录。
- 目录1/
- 目录1/子目录1/
- 目录1/子目录2/
- 目录1/子目录3/
- 目录2/
- 目录2/子目录1/
- 目录2/子目录2/
- ...
每个子目录包含几个文件。我需要用这个文件结构得到一个嵌套数组。
我正在使用适用于 PHP 2.4.2 的 Amazon AWS 开发工具包
这是我的代码:
但是,结果仅列出存储桶中的文件,而不列出目录/子目录(带前缀的文件)或目录本身中的文件。
如果我遍历,($dir.'/folder')
则根本没有结果。
IIRecursiveIteratorIterator::SELF_FIRST
作为第二个参数传递给迭代器的构造函数,我只得到第一级目录——没有子目录。
如何使用 AWS 流包装器和 PHP RecursiveIterator 列出存储桶中所有目录中的所有文件?
我希望有一个人可以帮助我。
谢谢!
php - PHP中的Amazon S3 StreamWrapper fread问题
我正在使用 amazon s3 API 并将客户端设置为流式读取。使用 file_get_contents("s3://{bucket}/{key}") 对我来说工作正常,它读取文件的完整数据(我在本地系统上使用视频文件和测试)。但是,我正在尝试优化脚本使用的内存,从而尝试按块读取和返回数据,如下所示:
这不适用于我的本地系统。我只是想知道使用这种技术可能会出现什么问题。通过搜索,我发现这也是一个非常广泛使用的技术。因此,如果有人可以就此处可能出现的问题或任何其他方法提出任何建议,我应该尝试一下,这将非常有帮助。谢谢。
php - PHPUnit stream_wrapper_register(): 协议 var:// 已经定义
我有一个曾经运行良好的测试套件。它基于 FWOpenCartTest,它是 PHPUnit_Framework_TestCase 的一个大后代,实现了一个 MVC 框架(基于 OpenCart)。
今天我不得不向这样的后代添加一个实例化另一个类的调用,该类在内部分配一个 var 流,如下所示:
从那以后,我无法运行任何测试,因为我不断收到 PHPUnit 转储,例如:
这是导致错误的小测试:
我要问的是:这是 PHPUnit 和测试用例类 FWOpenCartTest 之间的交互吗?
完成的应用程序可以工作,如果我不使用 PHPUnit 而只是创建一个包装器来实例化测试它也可以工作。
如果有交互,有没有办法隐藏 stream_wrapper_register() 以便 FWOpenCartTest 的构造函数不会发现它已经分配?
c# - Composite Stream Wrapper 提供部分 MemoryStream 和完整的原始 Stream
有谁知道一种复合流解决方案,它将预加载 Stream 的第一部分到 MemoryStream 中,并将其余部分保留为原始 Stream ,当需要后续部分时将访问该原始 Stream ?
我应该想象一些包装类将实现 Stream 接口,并根据访问的部分透明地处理两个流之间的访问。
我希望这是以前有人可能已经解决的解决方案,也许是为了优化读取大型 FileStream 的性能。
就我而言,我正在尝试解决从 SD 卡读取大文件的 Windows Phone 8 错误。此答案中提供了我试图解决的问题的更多详细信息: https ://stackoverflow.com/a/17355068/250254
php - stream wrapper and writing to php://memory results in internal server error 500
I'm trying to write a custom wrapper in PHP using the Stream Wrapper class. What I have now is pretty much simple and straight forward.
In the beginning of my code I open the stream by calling: Stream::wrap()
.
Then it basically reads any file that is require
'ed or include
'ed throughout my application. The code is then put into php://memory
and that's it. Nothing special yet.
Bottom line is, is that this piece of code should work. But it throws an Internal Server Error when I try to run my application. I have a Linux hosting provider (PHP 5.4.21) where my code is currently hosted.
But when I move my code from my current hoster to some other Linux hosting company (PHP 5.5.x), then everything works fine.
When I even move the code to my local computer (PHP 5.4.6) and run it, then everything works fine as well.
So obviously the problem lies at the hosting company that I currently have. I know I have to mail them. But I have no clue what is causing the problem exactly. It would be good if I could at least point them in a certain direction. All I have now is
my code isn't working on your servers which is working fine on some other server
I'm afraind that that isn't enough information for them.
I have checked the php://memory
limit which is set to 256M. That should be more than enough. So I have no clue what else to look for. The Apache log didn't had any information either.
So I was hoping anyone here had an idea of what could be causing this problem. Perhaps some permission issue somewhere or something?
amazon-s3 - 流式 mPDF 输出以供下载
这更像是一个概念性问题,但我想知道是否可以在下载时将 mPDF 的输出直接流式传输给用户(例如,无需保存在服务器上的临时文件夹中或加载到用户的浏览器中)。
我正在使用类似的方法成功地使用ZipStream和AWS PHP S3 Stream Wrapper下载 S3 照片的 zip 文件,效果非常好,所以我想为我的 PDF 生成采用类似的方法。
我使用mPDF库在 Heroku 上生成具有 S3 图像的报告。mPDF 文档显示了四个输出选项,包括inline
和download
; inline
将其直接加载到用户的浏览器中并download
强制下载提示(期望的行为)。
我已经在每个 mPDF Image() 文档的 PDF 中启用了 S3 Stream Wrapper 和嵌入图像,如下所示:
我还添加了header('X-Accel-Buffering: no');
使 ZipStream 在 Heroku 环境中工作所需的内容,但如果有多个图像,脚本总是会超时。
是否可以立即提示下载并将数据流直接提供给用户?我希望这种方法不仅可以用于 zip 下载,而且还不能用于这个特定的应用程序。