【问题标题】:Provide a file handle to a PHP function expecting a file path为需要文件路径的 PHP 函数提供文件句柄
【发布时间】:2017-07-23 22:04:45
【问题描述】:

使用PHPExcel,我想从互联网上读取文件。 PHPExcel 库似乎只适合打开本地文件,而不是 URL。这是我尝试过的:

<?php
require __DIR__ . '/vendor/autoload.php';
$string = file_get_contents('http://opendatakit.org/wp-content/uploads/static/sample.xls');

$stream = fopen('php://memory','r+');
fwrite($stream, $string);
rewind($stream);

$objPHPExcel = PHPExcel_IOFactory::load('php://memory');

这是我收到的错误:

致命错误:未捕获的异常“PHPExcel_Reader_Exception”与 消息'无法打开 php://memory 进行阅读!文件不 存在。'

我也尝试直接传递 URL (PHPExcel_IOFactory::load('http://opendatakit.org/wp-content/uploads/static/sample.xls'))。类似的错误。

致命错误:未捕获的异常“PHPExcel_Reader_Exception”与 消息'无法打开 http://opendatakit.org/wp-content/uploads/static/sample.xls 为 读!文件不存在。'

编辑:还尝试了一个临时文件

$string = file_get_contents('http://opendatakit.org/wp-content/uploads/static/sample.xls');

$temp = tmpfile();
fwrite($temp, $string);
fseek($temp, 0);

$objPHPExcel = PHPExcel_IOFactory::load($temp);

这次不同的错误:

警告:pathinfo() 期望参数 1 是字符串,给定资源 在 /project/vendor/phpoffice/phpexcel/Classes/PHPExcel/IOFactory.php 在第 224 行

警告:file_exists() 期望参数 1 是有效路径, 提供的资源 /project/vendor/phpoffice/phpexcel/Classes/PHPExcel/Reader/Excel2007.php 在第 81 行

致命错误:未捕获的异常“PHPExcel_Reader_Exception”与 消息'无法打开资源 id #10 进行阅读!文件不 存在。'

【问题讨论】:

  • 您的 php.ini 是否设置为允许打开外部 URL?

标签: php php-stream-wrappers


【解决方案1】:

你的想法很好。但是 PHPExcel 需要一个文件路径才能正常工作。 您可以尝试使用此示例:

$string = file_get_contents('http://opendatakit.org/wp-content/uploads/static/sample.xls');

$tmp = tempnam(sys_get_temp_dir(), "FOO");
file_put_contents($tmp, $string);

$objPHPExcel = PHPExcel_IOFactory::load($tmp);

//Perform all your operations
// ...

unlink($tmp);

查看tempnam()的PHP手册

【讨论】:

  • 谢谢!一个真正的临时文件似乎是唯一的解决方案。你能解释更多关于tempnam()的信息吗?它看起来像一个错字,但我看到它是一个真正的 PHP 函数!
  • tempnam() 函数只是在第一个参数中传递的目录中创建一个 uniq 文件。它还返回包含路径的文件名,以便您可以使用它!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-19
  • 2014-09-05
  • 2014-08-17
  • 1970-01-01
  • 2014-03-06
  • 1970-01-01
相关资源
最近更新 更多