在PHP 5.3.8上使用PHP curl对zip文件运行PUT命令

bz4sfanl  于 2022-11-13  发布在  PHP
关注(0)|答案(1)|浏览(143)

嗨,我需要在PHP中使用curl执行这个PUT命令,但是我在运行它时遇到了问题。需要传输的文件是一个zip文件。这是curl命令:
“内容类型:应用程序/zip”--数据二进制@ yZip.zip http://183.262.144.266:1211/y-validation/repository/HELLO
这是我目前掌握的代码

$ch = curl_init();
$filepath = 'yZip.zip';
curl_setopt($ch, CURLOPT_URL, 'http://183.262.144.266:1211/y-validation/repository/HELLO');
curl_setopt($ch, CURLOPT_PUT, 1);
curl_setopt($ch, CURLOPT_UPLOAD, 1);
$fh_res = fopen($filePath, 'r');
curl_setopt($ch, CURLOPT_INFILE, $fh_res);
curl_setopt($ch, CURLOPT_INFILESIZE, filesize($filePath));
curl_setopt($ch, CURLOPT_TIMEOUT, 86400); // 1 Day Timeout
curl_setopt($ch, CURLOPT_NOPROGRESS, false);
curl_setopt($ch, CURLOPT_BUFFERSIZE, 128);
$curl_response = curl_exec ($ch);
print_r($curl_response);

我已经采取了这个代码从各种网站,但我不断得到错误,不知道下一步该怎么办的任何想法?

已更新:已修复错误,我已成功链接REST API,但未正确上载zip文件。
更新2:更新了代码的变化,我已经尝试解决问题,但压缩仍然没有被正确放置。我也在PHP 5.3.8工作,所以不能使用CurlFile类。有人能帮助这个吗?
更新3:仍然有这个问题,试图实现头,但这也不工作,有人能帮助我吗?

tvmytwxo

tvmytwxo1#

我试了一下这个代码,让它为我工作...

<?php
 set_time_limit(600);
$ch = curl_init();
$filePath = 'file.zip';
curl_setopt($ch, CURLOPT_URL, 'http://site/reciver_script_name/uploading/path/name');
curl_setopt($ch, CURLOPT_POST, 1);
//curl_setopt($ch, CURLOPT_UPLOAD, 1);
$fh_res = fopen($filePath, 'r');
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-type: application/zip'));
curl_setopt($ch, CURLOPT_INFILE, $fh_res);
curl_setopt($ch, CURLOPT_INFILESIZE, filesize($filePath));
curl_setopt($ch, CURLOPT_TIMEOUT, 86400); // 1 Day Timeout
curl_setopt($ch, CURLOPT_NOPROGRESS, false);
curl_setopt($ch, CURLOPT_BUFFERSIZE, 128);
$curl_response = curl_exec ($ch);
print_r($curl_response);

?>

和接收器端:
一些路径提示。

$path = $_SERVER['SCRIPT_NAME'];
if (substr($path, 0, strlen($prefix)) != $prefix) {
    exit_not_found();
}
$path = substr($path, strlen($prefix));
$parts = explode('/', $path);
if (!is_array($parts) || count($parts) != 3) {
    exit_not_found();
}

和主要部分。

if (!$error) {
    $file_stream = fopen($file, 'w');
    if ($file_stream === false) {
        $error = 'fopen failed';
    }
}
if (!$error) {
    $copy_result = stream_copy_to_stream(fopen('php://input', 'r'), $file_stream);
    fclose($file_stream);
    if (!$copy_result) {
        $error = 'stream_copy_to_stream failed';
    }
}

相关问题