我在服务器上,我只限于PHP 5.2.6,这意味着我无法使用str_getcsv.我正在使用,而不是fgetcsv,它需要“一个有效的文件指针,指向由fopen(),popen()或fsockopen()成功打开的文件.”操作.
我的问题是:有没有办法将字符串作为文件句柄访问?
我的另一个选择是将字符串写入文本文件,然后通过fopen()访问它然后使用fgetcsv,但我希望有一种方法可以直接执行此操作,例如在perl中.
解决方法:
如果你看一下str_getcsv
手册页上的用户注释,你会发现this note from daniel,它提出了这个功能(引用):
<?php
if (!function_exists('str_getcsv')) {
function str_getcsv($input, $delimiter = ",", $enclosure = '"', $escape = "\\") {
$fiveMBs = 5 * 1024 * 1024;
$fp = fopen("php://temp/maxmemory:$fiveMBs", 'r+');
fputs($fp, $input);
rewind($fp);
$data = fgetcsv($fp, 1000, $delimiter, $enclosure); // $escape only got added in 5.3.0
fclose($fp);
return $data;
}
}
?>
它似乎完全符合你的要求:它使用一个指向内存中临时文件句柄的流,在其上使用fgetcsv
.
有关(其中包括)php:// temp stream wrapper的文档,请参阅PHP input/output streams.
当然,你应该测试它对你有用 – 但是,至少,这应该让你知道如何实现这个;-)