我的php curl上传脚本在localhost上成功运行,但在服务器上没有运行。 卷曲适用于简单的帖子,但不适用于发布文件。一旦我开始将文件添加到我的帖子数据(使用@作为文件路径前缀),它在服务器上没有显示任何内容($ _FILE& $ _POST都被发现未设置),而没有文件,则填充$ _POST。 我也在我的localhost和服务器上使用以下脚本。
$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文件。 它在localhost上工作正常,用于简单的帖子和文件上传,但不能在服务器上用于仅上传文件。请让我知道是什么导致问题出现在服务器上的脚本中。
答案 0 :(得分:1)
<?php
$connection = ssh2_connect('shell.example.com', 22);
ssh2_auth_password($connection, 'username', 'password');
ssh2_scp_send($connection, '/local/filename', '/remote/filename', 0644);
?>
更多细节可以在scp+php找到希望这可以帮助你:)。请根据您的需要进行更改
答案 1 :(得分:0)
我想问题是当服务器中的代码正在执行时是在@'.'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);