- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
在 PHP 中使用 fopen
相对于 SplFileObject
的优缺点是什么?
据我所知,SplFileObject
会在适用的情况下抛出异常,这在使用 try...catch
进行错误处理时很方便。除此之外,还有其他理由推荐其中一个吗?
(奖励:为什么叫SplFileObject
?Spl
代表什么?为什么不简单的FileObject
?)
更新: SplFileObject
的一个限制是它(还)没有 close
成员函数。在某些情况下,这可能是个问题(例如:Unlink and SplFileObject)。
最佳答案
SPL 代表标准 PHP 库。
SplFileObject
在内部使用由 fopen
创建的流资源。所以你的问题应该是什么时候使用 SplFileObject
或直接使用流资源?
SplFileObject
优点:
SplFileObject
提供了一种面向对象的文件操作方法(fread
是在 PHP 5.5.11 中添加的,fputcsv
是在 PHP 中添加的5.4)。
SplFileObject
实现了几个有用的 PHP 接口(interface)以支持使用其他 SPL Iterator以更好地操作您的文件。
SplFileObject
主要的缺点是它不能访问它的内部流资源。 PHP 函数最初是为了直接使用流资源而构建的。 SplFileObject
无法访问其自己的内部流资源这一事实使其无法与许多 PHP 内置函数一起使用:
php stream filters SplFileObject
的使用效果不佳。您需要依赖 php://filter
元包装器,这限制了它们的用处。
无法将 SplFileObject
与 cURL
一起使用
总结起来 SplFileObject
和流资源是不可互换的。 使用 SplFileObject
完成的任何事情都可以使用流资源和 SplFileObject
用户空间实现来实现,但反之则不然。
因此,根据用例,使用 fopen
创建的流资源可能是比依赖 SplFileObject
更好的选择。
至于close方法,你不需要...你只需要设置handler为null就可以释放/关闭内部流资源。
$file = new SplFileObject('/path/to/my/file'); //the file handler is created
$file = null; //the file handler is closed
关于php - PHP 中的 SplFileObject 与 fopen,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11850726/
是否可以取消文件与 SplFileObject 的链接? 我没有看到关闭底层资源的方法,并且文件句柄是私有(private)的,因此不能以此为目标扩展 SplFileObject。 有什么解决方法吗?
我正在使用 SPLFile 类创建一个 CSV 文件: $z=new SplFileObject('/tmp/test.csv.gz','w'); $arr=[['a','b','c'],[1,2,3
我正在使用 SPLFile 类创建一个 CSV 文件: $z=new SplFileObject('/tmp/test.csv.gz','w'); $arr=[['a','b','c'],[1,2,3
$file = new SplFileObject('/path/to/file.txt'); 如何使用 SplFileObject 查找文件中的行数? 最佳答案 iterator_count 和使用
我正在使用 SplFileInfo 和 SplFileObject 在 PHP 中处理文件。但是当我尝试“重新打开”一个文件时,它对我大喊: SplFileObject::__construct(f
在 PHP 中,SPLFileObject 允许将文件视为迭代器。 但是有一个行为我不明白。当您在对象上调用 next() 时,它会增加 key() 的值,但不会前进文件中的行,除非您在每次迭代时调用
我正在尝试使用 SplFileObject() 逐行编辑文件。我可以选择要编辑的文件所在的行。但是我该如何向该行写入一个 $string 呢? 这是我获取该行的代码: seek(9999);
我有两行数据文件(两行仅用于我的示例,实际上,该文件可以包含数百万行)并且我使用 SplFileObject 和 LimitIterator 进行偏移。但这种组合在某些情况下有奇怪的行为: $offs
我正在尝试在 symfony2 中实现存折网络服务并遵循这个 passbook bundle,我的 Controller 看起来像这样 if ($form->isValid()) {
PHP5 引入了面向对象的文件包装器 SplFileObject。我想我刚刚发现为什么几乎没有人使用它。它纯粹是面向行的,没有 fread() 方法——相应的 frwite 似乎暗示了这一点。 所以现
例如: $contents = file_get_contents(image.png); 是否可以从 $contents 创建一个 SplFileObject 对象? 谢谢! 最佳答案 php 有一
我有一个 TXT 文件,我需要打开它并在末尾添加一个新行。我正在使用 SplFileObject: $file = new SplFileObject( $this->fileName, 'w' );
我编写了一个类,而不是扩展 SplFileObject 以打开 CSV 并具有关联数组。它有效,但如果 csv 文件使用 CR 换行符则无效。 我知道你可以像这样转换字符串换行符: $string =
在 PHP 中使用 fopen 相对于 SplFileObject 的优缺点是什么? 据我所知,SplFileObject 会在适用的情况下抛出异常,这在使用 try...catch 进行错误处理时很
在问这个问题之前,我已经阅读了文档并广泛搜索了这个网站。 $file = new SplFileObject("/var/www/qacentre/compliance/compliance.csv"
使用 PHP 遍历 csv 文件时 SplFileObject和 READ_CSV 标志我得到一个带有 null 值的额外行。有没有办法自动删除此行? $file = new SplFileObjec
是否有与 PHP 的 SplFileObject 相同的手写 class 或 VC++ 插件可用? 请看问题https://stackoverflow.com/questions/10650864/f
当读取 csv 文件中的特定行时,我尝试将 SplFileObject::fseek 与 fgetcsv 一起使用。 为了读取第 2 行(例如),我执行了 fseek(1) 并使用 fgetcsv 读
我一直在制作一个网站,该网站具有基于访问 .txt 文件的 php 用户帐户登录系统。我最初在一个免费的网络托管服务上测试了大部分代码并使用户帐户登录系统正常运行,但是当我试图将它移到我自己的个人 a
我是一名优秀的程序员,十分优秀!