我编写了一个脚本,使用file_get_contents();
将图像文件上传到服务器,这在使用相对文件路径时有效,例如。 /var/test/image1.jpg
以及当我使用远程网址时,例如。 http://domain.com/test/image1.jpg
。
但是,它不适用于本地路径,即。文件:// C:/Users/me/Pictures/image1.jpg。我得到,“file_get_contents(file://C:/Users/me/Pictures/image1.jpg)
[function.file-get-contents]:无法打开流:不支持此类文件或目录”或“远程主机文件访问”。
我真的需要这个用于本地路径,以便远程客户端可以通过API将其本地映像上传到我的服务器。因此,我不能使用表格,需要使用此处指定的PUT方法([http://www.php.net/manual/en/features.file-upload.put-method.php] [1])但是如何我访问该文件?
我的API的代码如下,但我正在试图弄清楚如何从客户端本地机器获取文件内容:
if($_SERVER['REQUEST_METHOD'] == 'PUT') {
$input = file_get_contents("php://input"); //filepath passed from client in XML
//Convert the XML to an object we can deal with
$xml = simplexml_load_string($input);
$file_path = $xml->image->filepath;
if (file_exists($file_path) ){
$file_data = file_get_contents($file_path);
//Initialise the Curl Instance
$ch = curl_init();
//Set our Curl Options
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, TRUE);
curl_setopt($ch, CURLOPT_POSTFIELDS, $file_data);
//Execute the request
$response = curl_exec($ch);
$httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
//Close the Handle
curl_close($ch);
}
答案 0 :(得分:3)
您不应指定file://
要访问本地路径,您可以直接执行
file_get_contents('C:/Users/me/Pictures/image1.jpg');
您还可以使用下面的基于../
的导航
file_get_contents('../../../somefile.xyz');
编辑:如果您尝试访问客户端文件,即远程路径,那么将无法正常工作。您需要HTTP,FTP等内容来传输文件。仅提供本地文件系统地址是不够的。
端点需要以某种方式使文件可用(HTTP / FTP服务器),或者您需要通过浏览器和{{1}使客户端 upload } field。
答案 1 :(得分:1)
你无法使用file_get_contents()
从远程客户端的计算机上打开任何文件,除非他们在本地运行它们(他们还需要为此设置PHP),然后以某种方式将其提交给你的服务器。
file_get_contents()
允许您使用脚本打开同一台计算机上的文件,而不是打开不同的文件
您可以查看http://www.tizag.com/phpT/fileupload.php以获取文件上传者的简单示例