当我在数据库中使用fopen时,我得到了一个ressource流:
<?php
$query = "SELECT filepath
FROM files
WHERE id=123";
$result = do_query($query);
/*do_query() is a personal simplification*/
$line = mysql_fetch_array($result);
$file = fopen($line['filepath'], 'r');
/*var_dump on file return "resource(51) of type (stream)"*/
?>
但是我的项目我需要$ _FILE类型...我可以转换$ _FILE类型的资源流吗?
答案 0 :(得分:1)
$_FILES
不是“类型”,它只是一个包含有关上传文件的某些信息的数组。首先,如果你有一些代码硬编码使用$_FILES
,你应该改为接受一个通用参数。意思是,而不是:
function foo() {
echo $_FILES['tmp_name']:
}
将其重写为:
function foo($path) {
echo $path;
}
然后,您可以调用该函数并从任何位置传递任何路径。在你的情况下,你按原样传递$line['filepath']
。你不需要fopen
它,因为当你只是想要一条路径时,你会得到一个资源。
如果您需要“伪造”$_FILES
数组,则需要手动构建它:
$_FILES['foo']['name'] = '..';
$_FILES['foo']['type'] = '..';
$_FILES['foo']['size'] = '..';
$_FILES['foo']['tmp_name'] = $line['filepath'];
$_FILES['foo']['error'] = UPLOAD_ERR_OK;
但同样,您可能希望更改硬编码的任何代码以使用$_FILES
而不是此hackaround。