>source

나는 백엔드 개발자가 아니며, 주제에 대한 어휘와 이해는 약간이 부족합니다. 이 사건 : 주문을 운송 회사의 FTP에 전달 해야하는 WebShop을 구매합니다. WebHook에서 전달 된 데이터를 기반으로 XML 파일을 생성 할 때마다 주문을 만들 수 있고 작성한 Triggers를 사용하는 Shopify WebHook을 사용하고 있습니다. 나는 xampp와 ngrok로 로컬에서 일했고, 나는 Shopify, XML 생성, XML이 운송 회사의 FTP에 업로드 된 Shopify에서받은 데이터 전체를 보았습니다. 이 작업을 보았을 때 나는 FTP를 통해 PHP code를 업로드하려고 시도한 서버 중 하나에 액세스 할 수 있습니다. 이것은 오류가 발생한 경우입니다. TLS를 통한 FTP 연결이 설정되었지만 XML 파일을 업로드 할 때 "35 개의 파일이 끝나는" "파일 끝"이 나타납니다. 일부 읽기를 기반으로 서버와 해운 회사의 TLS 버전과 서버간에 불일치가있을 수 있음을 알 수 있습니다. 따라서 두 서버의 TLS 버전에서 온라인 도구를 확인했습니다. 운송 회사는 TLS 1.2 또는 심지어 낮은 동안 우리 서버가 TLS 1.3 인 것으로 보입니다. 웹 앱에서 스크린 샷이 있습니다.


우리 서버 : TLS 1.3 예 TLS 1.2 예 * TLS 1.1 번호 TLS 1.0 No. SSL 3 No. SSL 2 No. (*) 실험 : No-Sni를 사용하여 협상 된 서버 운송 회사 서버

문제는 버전 간의 비 호환성으로부터 비롯됩니까?

다음은 PHP code에서 사용중인 컬 설정입니다.

private function common($remote)
    {
        curl_reset($this->curlhandle);
        curl_setopt($this->curlhandle, CURLOPT_URL, 'ftps://' . $this->server . '/' . $remote);
        curl_setopt($this->curlhandle, CURLOPT_USERPWD, $this->username . ':' . $this->password);
        curl_setopt($this->curlhandle, CURLOPT_SSL_VERIFYPEER, FALSE);
        curl_setopt($this->curlhandle, CURLOPT_SSL_VERIFYHOST, FALSE);
        curl_setopt($this->curlhandle, CURLOPT_FTP_SSL, CURLFTPSSL_TRY);
        curl_setopt($this->curlhandle, CURLOPT_FTPSSLAUTH, CURLFTPAUTH_TLS);
        curl_setopt($this->curlhandle,CURLOPT_FTP_USE_EPRT, true);
        return $this->curlhandle;
    }
...
 public function upload($local, $remote)
    {
        //echo '<br>';
        //echo $local . ' ' . $remote;
        //echo '<br>';
        if ($fp= fopen($local, 'r')) {
            $this->curlhandle= self::common($remote);
            curl_setopt($this->curlhandle, CURLOPT_UPLOAD, 1);
            curl_setopt($this->curlhandle, CURLOPT_INFILE, $fp);
            curl_exec($this->curlhandle);
            $err= curl_error($this->curlhandle);
            $errn= curl_errno($this->curlhandle);
            echo '<br>';
            echo $errn;
            echo '<br>';
            echo $err;
            return !$err;
        }
        return false;
    }

질문에 더 많은 것을 추가 해야하는지 알려주는 것이 필요합니다. 이것은 내 첫 게시물이 여기에 있습니다.

PHP는 libcurl 라이브러리를 사용하고 있습니다. 또한 명령 줄 curl 명령 /실행 파일이 있습니다. 먼저 컬 도구가있는 명령 줄 /셸에서 FTPS 서버에 FTPS 서버에 연결하려고합니다. 올바른 설정을 알아 냈습니다. 그런 다음 만 PHP code로 전송하십시오. 또한 curlopt_ssl_verify *= false를 설정합니다. 그것은 위험합니다. 인증서를 확인하지 않으면 누군가가 당신을 인체적으로 사용할 수 있습니다.

Tomáš Pospíšek2021-06-20 00:29:07
  • 이전 xslt : XSL은 다른 파일의 요소 데이터의 존재에 따라 출력을 수정합니다.
  • 다음 Java를 사용하여 기존 JSON 배열 값으로 JSON 배열을 Java에서 업데이트하는 방법. 값은 외부 JSON 파일에서 업데이트되지 않습니다