PHP는 pcntl_fork를 사용하여 image_php 팁의 다중 프로세스 다운로드를 구현합니다.
이 기사의 예에서는 PHP가 pcntl_fork를 사용하여 다중 프로세스 이미지 다운로드를 구현하는 방법을 설명합니다. 참고할 수 있도록 모든 사람과 공유하세요. 구체적인 분석은 다음과 같습니다.
PHP pcntl_fork — 현재 프로세스의 현재 위치에 하위 프로세스인 분기를 생성합니다. 주석: 포크는 상위 프로세스와 하위 프로세스 모두 포크 위치에서 계속 실행됩니다. 상위 프로세스 실행 중에 얻은 포크 반환 값은 하위 프로세스 번호이고 하위 프로세스는 0을 얻습니다.
참고: PHP에는 다중 프로세스를 구현할 수 있는 pcntl_fork 함수가 있지만 pcntl 확장을 로드해야 하며 이 확장은 Linux에서만 컴파일할 수 있습니다.
1. 먼저 우분투에서 pcntl.so를 컴파일합니다. 우분투에서 pcntl 패키지를 찾을 수 없어 폴더를 만들고 그 안에 있는 pcntl 패키지를 찾아서 다음 명령을 실행했습니다. 코드는 다음과 같습니다.
# CD PHP
# apt-get 소스 php5
# cd php5-(WHATEVER_RELEASE)/ext/pcntl
# PHP화
# ./configure (참고 1)
#만들다
# make install phpize 명령은 PHP 플러그인 모듈을 위한 컴파일 환경을 준비하는 데 사용됩니다.
성공적으로 설치되면 extname.so가 생성되어 PHP의 플러그인 모듈 디렉터리에 저장됩니다(기본값은 /usr/lib/php/modules/에 저장됨). php.ini를 조정하고 확장명=extname을 추가해야 합니다. .so. 이 플러그인 모듈은 한 줄 이후에만 사용할 수 있습니다.
예:
pcntl_exec — 현재 프로세스 공간에서 지정된 프로그램을 실행합니다. 코드는 다음과 같습니다.
배열('/home/jerry/projects/www/test2.php'),
배열('/home/jerry/projects/www/test3.php')
);
foreach($cmds를 $cmd로){
$pid=pcntl_fork()
If($pid==-1){
//프로세스 생성 실패
echo '하위 프로세스 생성이 실패하면 -1을 반환합니다.'; 종료(-1)
}
else if($pid){
//상위 프로세스는 하위 프로세스 번호를 가져오므로 상위 프로세스가 실행하는 논리는 다음과 같습니다.
pcntl_wait($status,WNOHANG)
}
else{
//하위 프로세스 처리 로직
수면(5)
pcntl_exec('/usr/bin/php',$cmd)
종료(0); }
}
예를 들어 여러 이미지를 동시에 다운로드하려는 경우 코드는 다음과 같습니다.
//크롤링할 웹페이지 주소
$url = 'http://www.jb51.net'
$content = file_get_contents($url)
preg_match_all('/
list($sm, $ss) = 폭발(" ", 마이크로타임())
foreach($k는 $k => $val과 일치)
{
$pid[$k] = pcntl_fork()
if(!$pid[$k])
{
다운로드($url, $val)
// 하위 프로세스는 종료되어야 합니다. 그렇지 않으면 재귀적 다중 처리가 수행됩니다. 상위 프로세스는 종료되어서는 안 됩니다. 그렇지 않으면 다중 프로세스가 종료됩니다.
종료(0); }
if ($pid[$k])
{
// pcntl_waitpid($pid[$k], $status, WUNTRACED)
}
}
echo "다운로드 완료";
list($em, $es) = 폭발(" ", 마이크로타임())
echo "걸린 시간:",($es $em) - ($ss $sm),"n"
/**
* 웹 이미지 가져오기
*
*/
함수 다운로드($url, $val)
{
$pic_url = $val[1]
if (strpos($val[1], '//') !== false)
{
;
}
elseif (preg_match('@^(.*?)/@', $val[1], $inner_matches) == 0)
{
$pic_url = $url.$val[1]
}
elseif (preg_match('@[:.]@', $inner_matches[1], $tmp_matches) == 0)
{
$pic_url = $url.$val[1]
}
$pic = file_get_contents($pic_url)
if ($pic === false)
{
반품
}
preg_match('@/([^/] )$@', $pic_url, $tmp_matches)
// Assert를 사용하여 예외를 처리할 수 있습니다
$pic_file_name = $tmp_matches[1]
$f = fopen("tmp/".$pic_file_name, "wb") #
fwrite($f, $pic)
fclose($f)
}
/* pcntl_fork.php 파일 끝 */
?>

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











이번 장에서는 CakePHP의 환경 변수, 일반 구성, 데이터베이스 구성, 이메일 구성에 대해 알아봅니다.

PHP 8.4는 상당한 양의 기능 중단 및 제거를 통해 몇 가지 새로운 기능, 보안 개선 및 성능 개선을 제공합니다. 이 가이드에서는 Ubuntu, Debian 또는 해당 파생 제품에서 PHP 8.4를 설치하거나 PHP 8.4로 업그레이드하는 방법을 설명합니다.

CakePHP는 PHP용 오픈 소스 프레임워크입니다. 이는 애플리케이션을 훨씬 쉽게 개발, 배포 및 유지 관리할 수 있도록 하기 위한 것입니다. CakePHP는 강력하고 이해하기 쉬운 MVC와 유사한 아키텍처를 기반으로 합니다. 모델, 뷰 및 컨트롤러 gu

VS Code라고도 알려진 Visual Studio Code는 모든 주요 운영 체제에서 사용할 수 있는 무료 소스 코드 편집기 또는 통합 개발 환경(IDE)입니다. 다양한 프로그래밍 언어에 대한 대규모 확장 모음을 통해 VS Code는
