Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/261.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
php curl上载在我的服务器上不工作_Php_File Upload_Curl - Fatal编程技术网

php curl上载在我的服务器上不工作

php curl上载在我的服务器上不工作,php,file-upload,curl,Php,File Upload,Curl,我的php curl上载脚本在本地主机上成功运行,但在服务器上未成功运行。。 curl可以很好地用于简单的post,但不能用于发布文件。一旦我开始将文件添加到我的post数据中(在文件路径前面加@),它在服务器上就不会显示任何内容(发现$\u file和$\u post都未设置),而没有该文件,则会填充$\u post。 我也在本地主机和服务器上使用以下脚本 $request_url = 'http://localhost/curl_upload/curl_upload_process.php'

我的php curl上载脚本在本地主机上成功运行,但在服务器上未成功运行。。 curl可以很好地用于简单的post,但不能用于发布文件。一旦我开始将文件添加到我的post数据中(在文件路径前面加@),它在服务器上就不会显示任何内容(发现$\u file和$\u post都未设置),而没有该文件,则会填充$\u post。 我也在本地主机和服务器上使用以下脚本

$request_url = 'http://localhost/curl_upload/curl_upload_process.php';
$post_params['uploadfile'] = '@'.'D:\images\photo-b4.jpg';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $request_url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_params);
$result = curl_exec($ch);
curl_close($ch);
我已将服务器上的request_url更改为curl_upload_process.php文件。
对于简单的post和文件上传,它可以在本地主机上正常工作,但对于文件上传,它不能在服务器上正常工作。请让我知道是什么原因导致我在服务器上的脚本出现问题。

我猜问题在于,当服务器中的代码正在执行时,正在将文件归档到
@''D:\images\photo-b4.jpg'而不是从您的机器

其中,与localhost一样,您的计算机和服务器是相同的,因此其查找文件的物理位置是
@''D:\images\photo-b4.jpg'

如果您想上传文件,您需要在运行时发出整个web表单请求并将其发布到服务器

试着这样做:-这不是你需要相应修改的确切代码

    $requestparameters["title"] = $filetitle;

    $content = file_get_contents($_FILES['uploadingfile']['tmp_name']);
    $filefieldname = (array_keys($_FILES));
    $delimiter = '-------------' . uniqid();
    $filefields = array(
    'file1' => array(
    'name' => $_FILES['uploadingfile']['name'],
    'type' => $_FILES['uploadingfile']['type'],
    'content' => $content),
    );
    $data = '';
    foreach ($requestparameters as $name => $value) {
        $data .= "--" . $delimiter . "\r\n";
        $data .= 'Content-Disposition: form-data; name="' . $name . '";' . "\r\n\r\n";
        // note: double endline
        $data .= $value . "\r\n";
    }
    foreach ($filefields as $name => $file) {
        $data .= "--" . $delimiter . "\r\n";
        // "filename" attribute is not essential; server-side scripts may use it
        $data .= 'Content-Disposition: form-data; name="' . $filefieldname['0'] . '";' .
        ' filename="' . $file['name'] . '"' . "\r\n";
        // this is, again, informative only; good practice to include though
        $data .= 'Content-Type: ' . $file['type'] . "\r\n";
        // this endline must be here to indicate end of headers
        $data .= "\r\n";
        // the file itself (note: there's no encoding of any kind)
        $data .= $file['content'];
   }
   $data .= "\r\n"."--" . $delimiter . "--\r\n";
   $str = $data;
   // set up cURL
   $ch=curl_init($url);
    curl_setopt_array($ch, array(
       CURLOPT_HEADER => false,
       CURLOPT_RETURNTRANSFER => true,
       CURLOPT_POST => true,
       CURLOPT_HTTPHEADER => array( // we need to send these two headers
            'Content-Type: multipart/form-data; boundary='.$delimiter,
            'Content-Length: '.strlen($str)
       ),
       CURLOPT_POSTFIELDS => $data,
   ));
   $ress =   curl_exec($ch);
   curl_close($ch);

您好,在深入挖掘之后,我发现您可以使用scp命令,它使用SSH(secureshell)协议,php代码中有一个库可以使用它,但您需要有允许scp连接的服务器

<?php
$connection = ssh2_connect('shell.example.com', 22);
ssh2_auth_password($connection, 'username', 'password');
ssh2_scp_send($connection, '/local/filename', '/remote/filename', 0644);
?>


更多详细信息请访问Hope this可以帮助您:)。请进行更改以满足您的需要

尝试使用详细的curl。这可能有助于您监视此情况。确认您的服务器上是否启用了curl?@likai yes我的服务器上启用了curl。正如我所说,它只适用于简单的帖子,而不适用于文件上传。如果是发送$post_params['name']='Anup';它成功地到达服务器。@user801662我已经尝试了你的代码,它正在工作。:(@likai它真的在你的远程服务器上工作吗?如果是,我的服务器上可能缺少一些东西。请确认它是否从客户端计算机上载/发送文件到你的远程服务器?我可以简单地说,你的答案必须工作(对于其他情况)但是我只是不想浏览文件。我的机器上只有文件的路径,我只想通过它们的路径上传这些文件。没有浏览。这篇文章可以明确使用curl我想直接上传文件是不可能的,因为你需要使用curl的shell cmd我同意。那么如何通过k实现同样的ie上传文件呢知道他们在客户端机器上的路径。感谢anwser Dinkar,我会试试。