PHP-无需表单即可访问/上传本地文件到服务器。在API上使用PUT file://文件

PHP-无需表单即可访问/上传本地文件到服务器。在API上使用PUT file://文件,php,file-upload,Php,File Upload,我编写了一个脚本,使用file\u get\u contents()将图像文件上传到服务器上这在使用相对文件路径(例如/var/test/image1.jpg)和远程url(例如http://domain.com/test/image1.jpg 但是,它不适用于本地路径,即:file://C:/Users/me/Pictures/image1.jpg。我获取,“文件获取内容(file://C:/Users/me/Pictures/image1.jpg)[function.file get con

我编写了一个脚本,使用
file\u get\u contents()将图像文件上传到服务器上
这在使用相对文件路径(例如
/var/test/image1.jpg)和远程url(例如
http://domain.com/test/image1.jpg

但是,它不适用于本地路径,即:file://C:/Users/me/Pictures/image1.jpg。我获取,“
文件获取内容(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);
}

您不应该指定
文件://
要访问本地路径,您可以直接执行以下操作

file_get_contents('C:/Users/me/Pictures/image1.jpg');
您还可以使用基于
。/
的导航(如下所示)相对于当前目录进行导航

file_get_contents('../../../somefile.xyz');

编辑:如果您试图访问客户端文件,即远程路径,则将不起作用。你需要像HTTP、FTP之类的东西来传输你的文件。仅仅给出本地文件系统地址是不够的


端点需要以某种方式使文件可用(HTTP/FTP服务器),或者您需要让客户端通过浏览器和一个
字段访问它。

您不应该指定
文件://
要访问本地路径,您可以直接执行以下操作

file_get_contents('C:/Users/me/Pictures/image1.jpg');
您还可以使用基于
。/
的导航(如下所示)相对于当前目录进行导航

file_get_contents('../../../somefile.xyz');

编辑:如果您试图访问客户端文件,即远程路径,则将不起作用。你需要像HTTP、FTP之类的东西来传输你的文件。仅仅给出本地文件系统地址是不够的


端点需要以某种方式使文件可用(HTTP/FTP服务器),或者您需要让客户端通过浏览器和一个
字段来它。

除非它们在本地运行,否则您无法使用
file\u get\u contents()
从远程客户端的计算机打开任何文件(他们还需要为此设置PHP),然后以某种方式将其提交到您的服务器

file\u get\u contents()
允许您打开与脚本在同一台计算机上的文件,而不是在不同的计算机上


您可以查看一个简单的文件上传器示例,除非他们在本地运行(他们也需要为此设置PHP),然后以某种方式将文件提交到您的服务器,否则您无法使用
file\u get\u contents()
从远程客户端的计算机打开任何文件

file\u get\u contents()
允许您打开与脚本在同一台计算机上的文件,而不是在不同的计算机上



你可以看看一个简单的文件上传者的例子

奇怪的是,当人们投反对票而不发表评论时……正因为如此,你才投反对票。你想做什么?你上传了图像并试图将其交给用户吗?在我看来,你在使用file://C:/Users…@Asken,谢谢我自己也有点被否决票弄糊涂了!我正试图从远程计算机上传一个文件而不使用表单。我使用的是Curl。而Curl的一个例子可能会很奇怪?当人们否决投票而不发表评论时…就因为这样被否决了。你想做什么?你上传了图像并试图将其提供给用户吗?它是在我看来,您在使用file://C:/Users时试图访问客户端文件…@Asken,谢谢,我自己也被否决票弄糊涂了!我正在尝试从远程计算机上载一个文件,而不使用表单。我正在使用Curl。Curl的一个例子可能是:@leete如果是远程路径,那么
本地路径是什么意思您正在访问的计算机,
file\u get\u contents
无法为您获取它。如果它是您服务器中的本地访问,请删除
文件://
。已检查该文件的权限,并显示其系统完全权限。我认为这是正确的?我希望在远程计算机上访问文件是的。如果我无法做到这一点,我如何上载文件不是表单吗?@leete你不能直接从远程计算机上提取文件,除非
(a)
文件暴露在web上(安装在远程端点的web服务器)或者
(b)
你通过
FTP
进行身份验证和获取(需要在远程端点运行FTP服务器),或者
(c)
远程计算机上的用户上载它。这是一个API,因此用户将上载文件,但不使用表单。他们需要指定文件的本地文件路径,我将以某种方式使用Curl进行上载。@leete
本地路径
是什么意思?如果您正在访问的是远程计算机,
文件获取内容
无法为您获取它。如果它是您服务器中的本地访问,请删除
文件://
。已检查该文件的权限,并显示其系统完全权限。我认为这是正确的?我希望在远程计算机上访问文件是的。如果我无法做到这一点,那么我如何在没有表单的情况下上载文件?@leete您不能从远程计算机上获取文件计算机,除非
(a)
文件向web公开(安装在远程端点的web服务器)或
(b)
您通过
FTP进行身份验证和获取(需要在远程端点运行FTP服务器),或
(c)
远程计算机上的用户上载它。这是一个API,因此用户将