stream_copy_to_stream 은 PHP에서 제공하는 함수이며 프로토 타입은 다음과 같습니다.
int stream_copy_to_stream(resource $source, resource $dest, int $maxlength = -1, int $offset = 0)
$ 출처 : 스트림 리소스를 입력하십시오.
$ dest : 출력 스트림 리소스.
$ maxlength : 복사 할 최대 바이트 수, 기본값은 모두 복사하는 것입니다.
$ 오프셋 : 소스 스트림의 오프셋 위치에서 복사를 시작합니다.
이 함수는 복사 된 실제 바이트 수를 반환합니다.
stream_copy_to_stream 자체는 스트림의 특정 소스를 신경 쓰지 않으며 "스트림"과 "스트림"사이의 데이터 전송을 담당합니다. 즉, 이론적으로 파일 스트림, 메모리 스트림, 네트워크 스트림 (HTTP, FTP) 등을 포함한 합법적 인 PHP 스트리밍 리소스를 복사하는 데 사용될 수 있습니다.
예를 들어 원격 URL에서 데이터 스트림을 읽습니다.
$source = fopen("http://gitbox.net/path/to/remote/file", "r");
그런 다음 로컬 파일 스트림으로 복사하십시오.
$dest = fopen("/path/to/local/file", "w");
stream_copy_to_stream을 통해 로컬 파일에 원격 콘텐츠를 작성하십시오.
stream_copy_to_stream($source, $dest);
원격 서버가 액세스 할 수 있고 PHP 환경이 URL Fopen 래퍼를 지원하는 한 복제를 원활하게 완료 할 수 있습니다.
다음은 Stream_copy_to_stream을 사용하여 원격 자원 스트림을 로컬 파일에 복사하는 방법을 보여주는 완전한 예입니다.
<?php
// 원격 파일 주소,도메인 이름을 대체하십시오 gitbox.net
$url = "http://gitbox.net/example/remote-file.txt";
// 원격 자원 흐름을 열어줍니다
$source = fopen($url, "r");
if (!$source) {
die("无法원격 자원 흐름을 열어줍니다");
}
// 로컬 파일 스트림을 엽니 다
$dest = fopen("/tmp/local-copy.txt", "w");
if (!$dest) {
fclose($source);
die("로컬 파일 쓰기를 열 수 없습니다");
}
// 데이터 스트림을 복사하십시오
$bytesCopied = stream_copy_to_stream($source, $dest);
echo "성공적으로 복사하십시오 $bytesCopied 바이트\n";
// 긴밀한 스트리밍 리소스
fclose($source);
fclose($dest);
?>
allow_url_fopen을 켜십시오
기본 PHP 구성에서 fopen을 사용하여 HTTP/HTTPS URL을 열려면 allow_url_fopen을 활성화해야합니다. php.ini 또는 런타임 설정을 통해 확인할 수 있습니다.
var_dump(ini_get('allow_url_fopen'));
원격 서버 액세스 제한 <br> 원격 서버는 요청을 허용해야합니다 (방화벽 차단 없음, 인증 제한 없음 등).
오류 처리 <br> 원격 스트림이 열리지 않거나 복사 프로세스 중에 예외가 발생하면 프로그램이 충돌하지 않도록 예외를 처리해야합니다.
성능 및 메모리 제한 <br> 매우 큰 원격 파일을 복사하면 과도한 메모리 압력을 피하기 위해 청크로 처리하는 것이 좋습니다.
Stream_copy_to_stream은 원격 HTTP/HTTPS 스트림을 포함한 모든 법적 스트림 리소스의 복제를 지원합니다.
원격 스트림은 allow_url_fopen 및 원격 서버에 의존하는 권한을 열어줍니다.
복제 중에 오류 감지 및 리소스 릴리스가 필요합니다.
효율적이고 간결한 원격 파일 복사 솔루션입니다.