현재 위치: > 최신 기사 목록> PHP CLI 및 웹 환경 에서이 기능 사용에 대한 메모

PHP CLI 및 웹 환경 에서이 기능 사용에 대한 메모

M66 2025-05-17

PHP는 강력한 해싱 기능을 제공하여 여러 해싱 알고리즘이 데이터를 암호화하거나 검증 할 수 있도록합니다. 이러한 함수 중에서 Hash_update_stream 함수는 스트리밍을 통해 해시 값을 점차적으로 업데이트 할 수있는 매우 유용한 도구입니다. PHP CLI (Command Line Interface) 환경에서 또는 웹 환경에서 Hash_update_stream 함수를 사용할 때주의를 기울여야하는 몇 가지 문제가 있습니다. 이 기사는 환경 에서이 기능을 사용할 때 발생할 수있는 문제와이를 처리하기위한 전략에 대한 자세한 정보를 제공합니다.

hash_update_stream 함수 소개

hash_update_stream 함수는 스트림 데이터를 단계별로 처리하고 일반적으로 hash_inithash_final 과 함께 사용되는 해시 값을 업데이트하는 데 사용됩니다. 기본 구문은 다음과 같습니다.

 bool hash_update_stream ( resource $context , resource $stream [, int $length = 1024 ] )
  • $ 컨텍스트 : Hash_Init 함수에 의해 생성 된 해시 컨텍스트 리소스.

  • $ stream : 읽어야하는 스트림 리소스, 일반적으로 파일 자원 또는 데이터 스트림.

  • $ 길이 : 데이터 블록의 크기는 매번 읽을 수 있으며 기본값은 1024 바이트입니다.

사용할 때 주목해야 할 사항

CLI 및 웹 환경에서는 hash_update_stream을 사용할 때 몇 가지 다른 상황이 발생합니다. 다음은 두 환경에서 모두 사용할 때 직면 할 수있는 문제에 대해 설명합니다.

1. PHP CLI 환경의 사용 문제

PHP CLI 환경에서 PHP 스크립트는 일반적으로 명령 줄에서 실행됩니다. CLI 스크립트는 웹 환경에서 요청/응답주기에 제한이 없기 때문에 더 오랜 기간 동안 작업을 수행 할 수 있습니다. 그러나 hash_update_stream을 사용하는 경우에도 다음 사항이 여전히 언급되어야합니다.

1.1 큰 파일 읽기

명령 줄에서 큰 파일을 처리 할 때 메모리 문제가 발생할 수 있습니다. 파일이 매우 크면 한 번에 전체 파일을 읽으면 메모리 오버플로 또는 성능 문제가 발생할 수 있습니다. 이를 피하기 위해 적절한 $ 길이 매개 변수를 설정하여 시간당 데이터의 양을 제어 할 수 있습니다. 예를 들어:

 $context = hash_init('sha256');
$stream = fopen('largefile.txt', 'r');
while (!feof($stream)) {
    hash_update_stream($context, $stream, 1024);
}
fclose($stream);
$hash = hash_final($context);

이를 통해 파일을 배치로 읽고 메모리 부담을 줄일 수 있습니다.

1.2 시간 초과 문제

CLI 스크립트는 웹 요청 시간 초과로 제한되지 않지만 스크립트가 너무 오랫동안 처리되면 타임 아웃이나 서버 리소스가 점유 될 수 있습니다. hash_update_stream을 사용하는 경우 처리 로직이 무한 루프를 유발하지 않도록해야합니다. 필요한 경우 적절한 로깅 또는 진행 출력을 사용하여 과도한 작동으로 인한 시스템 자원 문제를 피할 수 있습니다.

2. PHP 웹 환경의 사용 문제

CLI 환경과 달리 웹 환경의 PHP 스크립트는 종종 요청의 실행 시간과 메모리 크기에 의해 제한됩니다. 웹 환경에서 hash_update_stream을 사용하는 경우 다음 측면에 특별한주의를 기울여야합니다.

2.1 요청 시간 초과 문제

웹 환경의 요청은 일반적으로 시간 제한됩니다. 기본적으로 PHP 스크립트의 최대 실행 시간은 30 초이며 많은 양의 데이터를 처리하면 타임 아웃 문제가 발생할 수 있습니다. max_execution_time 구성 항목을 조정하여 실행 시간을 연장 할 수 있습니다.

 ini_set('max_execution_time', 300); // AS를 설정합니다 5 분

또한 매우 큰 파일 또는 데이터 스트림을 작업하는 경우 특히 사용자가 큰 파일을 업로드 할 때 파일 업로드의 크기 제한을 늘리는 것을 고려할 수 있습니다.

 ini_set('upload_max_filesize', '50M'); // 최대 파일 크기는입니다 50MB
ini_set('post_max_size', '50M'); // 최대 양식 제출 데이터는 다음과 같습니다 50MB
2.2 메모리 제한 문제

웹 환경에서 PHP의 메모리 제한은 일반적으로 낮습니다. 큰 파일을 처리 할 때 hash_update_stream을 사용하는 경우 메모리 제한 오류를 쉽게 트리거 할 수 있습니다. Memory_Limit 구성 항목을 추가하여 해결할 수 있습니다.

 ini_set('memory_limit', '512M'); // AS를 설정합니다 512MB

그러나 메모리 제한을 증가시키는 것은 서버로드를 과도하게 유발할 수 있으므로 최적의 솔루션이 아닙니다. 더 좋은 방법은 청크에서 파일을 읽어 메모리 사용을 제어하는 ​​것입니다.

2.3 안전 및 성능

특히 사용자가 업로드 한 파일을 처리 할 때 웹 환경에서 보안이 특히 중요합니다. 파일의 해시 값은 해시 _update_stream 함수를 통해 확인하여 파일이 변조되지 않았는지 확인할 수 있습니다. 사용자가 업로드 한 파일의 경우 해시를 처리하기 전에 계산하고 예상 해시 값과 비교할 수 있습니다. 이렇게하면 악성 파일이 업로드되는 것을 효과적으로 방지 할 수 있습니다.

3. 코드의 URL과 관련된 문제

일부 응용 프로그램 시나리오에서 PHP 프로그램은 URL을 통해 파일 또는 데이터 스트림에 액세스하고 해시 값을 업데이트하기 위해 Hash_update_stream을 사용해야 할 수도 있습니다. 현재 코드에 URL이 나타나면 도메인 이름을 M66.net으로 바꾸는 데 특별한주의를 기울여야합니다. 예를 들어:

 $url = 'https://example.com/file.txt';
$stream = fopen($url, 'r'); // 할 것이다 URL 파일 스트림을 가리 킵니다
$context = hash_init('sha256');
hash_update_stream($context, $stream);
fclose($stream);
$hash = hash_final($context);

위 코드의 URL 도메인 이름을 M66.net 으로 바꾸어야하는 경우 코드를 다음으로 변경해야합니다.