Как загрузить изображение с сервера на другой сервер с помощью php - PullRequest
1 голос
/ 24 июня 2019

Я попробовал приведенный ниже код для загрузки изображения с одного сервера на другой сервер с помощью php. Но я не могу загрузить изображение на целевой сервер. Пожалуйста, дайте мне знать, если я сделал что-то не так в моем коде.

Код, используемый в form.php, который находится на моем исходном сервере:

<form enctype="multipart/form-data" encoding='multipart/form-data' method='post' action="form.php">
    <input name="uploadedfile" type="file" value="choose">
    <input type="submit" value="Upload">
   </form>
   <?
   if ( isset($_FILES['uploadedfile']) ) {
   $filename  = $_FILES['uploadedfile']['tmp_name'];
   $handle    = fopen($filename, "r");
   $data      = fread($handle, filesize($filename));
   $POST_DATA = array(
  'file' => base64_encode($data)
   );
   $curl = curl_init();
   curl_setopt($curl, CURLOPT_URL, 'https://www.kanchikart.in/img/handle.php');
   curl_setopt($curl, CURLOPT_TIMEOUT, 30);
   curl_setopt($curl, CURLOPT_POST, 1);
   curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
   curl_setopt($curl, CURLOPT_POSTFIELDS, $POST_DATA);
   $response = curl_exec($curl);
   curl_close ($curl);
   echo "<h2>File Uploaded</h2>";
   }
  ?>

и в моем handler.php, который находится на моем сервере назначения:

<?php
  $encoded_file = $_POST['file'];
  $decoded_file = base64_decode($encoded_file);
  /* Now you can copy the uploaded file to your server. */
  file_put_contents('<span style="color: red;">subins</span>', $decoded_file);
  ?>

После попытки с вышеуказанным кодом я не получаю изображение, которое будет сохранено на моем сервере назначения.

1 Ответ

0 голосов
/ 24 июня 2019

При работе с https конечными точками вам нужны дополнительные опции, установленные в запросе curl - в частности, действительный cacert ... вы можете скачать свою собственную копию cacert.pem с curl.haxx.se

Проверьте ответ или используйте info (http_code), чтобы определить успех или неудачу. Следующее, похоже, сработало для меня и дало код ответа 200 ~ проверьте, есть ли новый файл

<?php

    if ( isset($_FILES['uploadedfile']) ) {

        $filename  = $_FILES['uploadedfile']['tmp_name'];
        $handle    = fopen($filename, "r");
        $data      = fread($handle, filesize($filename));

        $POST_DATA = array(
            'file' => base64_encode( $data )
        );
        $cacert='c:/wwwroot/cacert.pem';
        $url='https://www.kanchikart.in/img/handle.php';

        $curl = curl_init();
        if( parse_url( $url,PHP_URL_SCHEME )=='https' ){
            curl_setopt( $curl, CURLOPT_SSL_VERIFYPEER, true );
            curl_setopt( $curl, CURLOPT_SSL_VERIFYHOST, 2 );
            curl_setopt( $curl, CURLOPT_CAINFO, $cacert );
        }

        curl_setopt($curl, CURLOPT_URL, $url );
        curl_setopt($curl, CURLOPT_TIMEOUT, 30);
        curl_setopt($curl, CURLOPT_POST, 1);
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($curl, CURLOPT_POSTFIELDS, $POST_DATA);

        $response = curl_exec($curl);
        $info = (object)curl_getinfo( $curl );
        curl_close ($curl);


        echo ( $info->http_code==200 ) ? "<h2>File Uploaded</h2>" : "<h2>Bogus</h2>";

    }
?>
<!DOCTYPE html>
<html lang='en'>
    <head>
        <meta charset='utf-8' />
        <title>cURL - Server to Server....</title>
    </head>
    <body>
        <form enctype="multipart/form-data" encoding='multipart/form-data' method='post'>
            <input name="uploadedfile" type="file" value="choose">
            <input type="submit" value="Upload">
        </form>
    </body>
</html>
...