php move_uploaded_file 出现错误 HTTP 包装器不支持可写连接
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/20165461/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Getting error with move_uploaded_file HTTP wrapper does not support writeable connections
提问by Rohitashv Singhal
I am currently working on a project with php. Here I want to store the image into folder using move_uploaded_filebut when I use the following code :
我目前正在使用 php 开发一个项目。在这里,我想move_uploaded_file使用以下代码将图像存储到文件夹中:
if (move_uploaded_file($_FILES['file_promo_image']['tmp_name'], $uploadfile))
{
echo "Le fichier est valide, et a été téléchargé avec succès.\n";
}
I am getting the following error :
我收到以下错误:
Warning: move_uploaded_file(http://www.desgensbien.com/sites/bestinfo/images/news/CodeCogsEqn.gif) [function.move-uploaded-file]: failed to open stream: HTTP wrapper does not support writeable connections. in /homez.534/desgensb/www/sites/bestinfo/admin/record-news.php on line 73
Warning: move_uploaded_file() [function.move-uploaded-file]: Unable to move '/tmp/phpfCHv2s' to 'http://www.desgensbien.com/sites/bestinfo/images/news/CodeCogsEqn.gif' in /homez.534/desgensb/www/sites/bestinfo/admin/record-news.php on line 73
How can I resolve this issue
我该如何解决这个问题
回答by Amit Dave
Use this:
用这个:
$uploadfile = $_SERVER['DOCUMENT_ROOT'] . '/sites/bestinfo/images/news/CodeCogsEqn.gif';
回答by Gilles
Hello
I know the ticket was open a while ago but i have been looking for this complete code for a while and I only found pieces of it on the net but nothing that fully worked, so here it is. I hope it helps some people.
你好,
我知道票在不久前是开放的,但我一直在寻找这个完整的代码一段时间,我只在网上找到了它的一部分,但没有完全奏效,所以它在这里。我希望它可以帮助一些人。
I saw your post and i had exactly the same issue using most of the information found here- main author of the code below with w3schools.
我看到了你的帖子,我使用这里找到的大部分信息遇到了完全相同的问题- 下面代码的主要作者和 w3schools。
Here is how it can be done, two ways :
这是如何完成的,两种方法:
1- your upload form or function is on the server that receives the file
1- 您的上传表单或功能位于接收文件的服务器上
// the index.php file on the server
<br><br>
<?php /* includes */ require_once 'upload.php'; ?>
<!DOCTYPE html>
<html><body> Formulaire de téléchargement d'une image <br><br>
<form action="upload.php" method="POST" enctype="multipart/form-data">
Select image to upload:
<input type="file" name="fileToUpload" id="fileToUpload">
<input type="submit" value="Upload Image" name="submit">
</form>
</body> </html>
the upload.php file, in the same dir in this case
在这种情况下,upload.php 文件在同一个目录中
<?php
// writing in a sublfolder called image
$target_dir = "image/";
$target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]);
$uploadOk = 1;
$imageFileType = pathinfo($target_file,PATHINFO_EXTENSION);
// Check if image file is a actual image or fake image
if(isset($_POST["submit"])) {
$check = getimagesize($_FILES["fileToUpload"]["tmp_name"]);
if($check !== false) {
echo "File is an image - " . $check["mime"] . ".";
$uploadOk = 1;
} else {
echo "File is not an image.";
$uploadOk = 0;
}
}
if ($uploadOk == 0) {
echo "Sorry, your file was not uploaded.";
// if everything is ok, try to upload file
} else {
// give a name and direction to the image - i changed the name to test.jpg...
$uploadfile = $_SERVER['DOCUMENT_ROOT'].$target_dir.'test.jpg';
echo "<br><br>";
echo $uploadfile;
echo "<br><br>";
if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $uploadfile)) {
echo "The file ". basename( $_FILES["fileToUpload"]["name"]). " has been uploaded.";
} else {
echo "Sorry, there was an error uploading your file.";
}
}
?>
2- Second option, if your webserver is different from the server receiving the file, here you will need to have two files one on each server :
2- 第二个选项,如果您的网络服务器与接收文件的服务器不同,则您需要在每个服务器上有两个文件:
Server that sends the file (your web server) : send.php
发送文件的服务器(您的 Web 服务器):send.php
<?php
// I uploaded a file called sample2.jpeg from on server to another
// again you can make functions out of this
$target_url = 'http://192.168.56.103/receive.php';
//This needs to be the full path to the file you want to send.
$file_name_with_full_path = realpath('./sample2.jpeg');
/* curl will accept an array here too.
* Many examples I found showed a url-encoded string instead.
* Take note that the 'key' in the array will be the key that shows up in the
* $_FILES array of the accept script
*/
//$post = array('extra_info' => '123456','file_contents'=>'@'.$file_name_with_full_path);
$post = array('file_contents' => new CurlFile($file_name_with_full_path, 'text/plain' /* MIME-Type */,'' /*directory*/));
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$target_url);
curl_setopt($ch, CURLOPT_POST,1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
$result=curl_exec ($ch);
curl_close ($ch);
echo $result;
?>
and the file on the receiving server end : receive.php
以及接收服务器端的文件:receive.php
<?php
// you can chage the destination path
$uploaddir = realpath('./') . '/';
$uploadfile = $uploaddir . basename($_FILES['file_contents']['name']);
echo "<br><br>";
print_r ($uploadfile);
echo "<br><br>";
echo '<pre>';
if (move_uploaded_file($_FILES['file_contents']['tmp_name'], $uploadfile)) {
echo "File is valid, and was successfully uploaded.\n";
} else {
echo "Possible file upload attack!\n";
}
echo 'Here is some more debugging info:';
print_r($_FILES);
echo "\n<hr />\n";
print_r($_POST);
print "</pr" . "e>\n";
?>
<br><br>Sources and references to other codes :
<br>http://stackoverflow.com/questions/12667797/using-curl-to-upload-post-data-with-files
<br>http://stackoverflow.com/questions/15200632/how-to-upload-file-using-curl-with-php
<br>http://code.stephenmorley.org/php/sending-files-using-curl/
<br>http://www.w3schools.com/php/php_file_upload.asp
Thanks again to the true authors of 99% of the code, fixed with peoples comment on stackoverflow forum : derakkilgo and W3SCHOOLS.
再次感谢 99% 代码的真正作者,修复了人们在 stackoverflow 论坛上的评论:derakkilgo 和 W3SCHOOLS。

