有没有办法在PHP中访问字符串作为文件句柄?

我在服务器上,我只限于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.

当然,你应该测试它对你有用 – 但是,至少,这应该让你知道如何实现这个;-)

相关文章

统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...