PHP 가 정시 임 무 를 수행 하 는 다섯 가지 방법 을 상세히 설명 합 니 다.

5502 단어 php정시 임무
정시 실행 작업 은 한 사이트 에 있어 서 비교적 중요 한 임무 입 니 다.예 를 들 어 정시 에 문 서 를 발표 하고 정 해진 시간 에 쓰레기 정 보 를 정리 하 는 등 현재 의 사 이 트 는 대부분이 PHP 동적 언어 로 개발 되 었 습 니 다.PHP 의 실현 에 있어 자바 와 Net 이라는 AppServer 개념 이 없 음 을 결정 합 니 다.http 프로 토 콜 은 무 상태 프로 토 콜 로 PHP 는 사용자 에 게 만 실 행 될 수 있 습 니 다.호출 되면 메모리 가 자동 으로 종 료 됩 니 다.상주 메모리 가 없습니다.
만약 굳이 PHP 가 정시 임 무 를 실현 하려 고 한다 면 다음 과 같은 몇 가지 해결 방안 이 있 을 수 있다.
1.간단 하고 직접적 으로 결 과 를 고려 하지 않 는 형

<?php
ignore_user_abort();//     ,PHP         .
set_time_limit(0);//   set_time_limit(0)             
ini_set('memory_limit','512M'); //       
$interval=60*30;//        
do{
  //ToDo 
  sleep($interval);//   5  
}
while(true);
단점:시작 하면 PHP 숙주 를 중지 하지 않 으 면 제어 할 수 없습니다.해커 가 아니라면 이런 방법 을 사용 하지 마 십시오.
2.단순 제어 형

config.php

<?php
return 1;
?>
cron.php


  
ignore_user_abort();//     ,PHP         .
set_time_limit(0);//   set_time_limit(0)             
$interval=60*30;//        
do{
  $run = include 'config.php';
  if(!$run) die('process abort');
  
  //ToDo
  sleep($interval);//   5  
}
while(true);
config.php 의return 0 를 바 꾸 어 정지 프로그램 을 실현 합 니 다.실행 가능 한 방법 은 config.php 파일 과 특정한 폼 의 상호작용 을 통 해 HTML 페이지 를 통 해 변 수 를 설정 하 는 것 입 니 다.
단점:시스템 자원 을 차지 하고 장시간 운행 하면 예상 치 못 한 위험 이 있 을 수 있 습 니 다.예 를 들 어 메모리 관리 방면 의 문제.
3.단순 개량 형

<?php
$time=15;
$url="http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
/*
  function
*/
sleep($time);
file_get_contents($url);
?>
php 스 크 립 트 sleep 는 일정 시간 후에 자신 에 게 접근 하 는 방식 으로 계속 실 행 됩 니 다.마치 릴레이 경주 처럼...그러면 모든 PHP 스 크 립 트 의 실행 시간 이 그리 길지 않 을 것 입 니 다.time_out의 제한 을 받 지 않 습 니 다.
매번 순환 phop 파일 은 독립 적 으로 실행 되 기 때문에 이 방법 은time_out의 제한 을 피 할 수 있 습 니 다.그러나 프로 세 스 를 종료 할 수 있 도록 위 와 같이 제어 코드 를 추가 하 는 것 이 좋 습 니 다.cofig.phop.
4.서버 정시 퀘 스 트
유 닉 스 플랫폼
유 닉 스 시스템 을 사용 하려 면 PHP 스 크 립 트 의 맨 앞 에 특수 한 코드 를 추가 하여 실행 할 수 있 도록 해 야 합 니 다.그러면 시스템 은 어떤 프로그램 으로 이 스 크 립 트 를 실행 해 야 하 는 지 알 수 있 습 니 다.유 닉 스 시스템 에 추 가 된 첫 번 째 줄 코드 는 이 스 크 립 트 가 Windows 에서 실행 되 는 데 영향 을 주지 않 기 때문에 이 방법 으로 크로스 플랫폼 스 크 립 트 프로그램 을 작성 할 수 있 습 니 다.
1.Crontab 에서 PHP 로 스 크 립 트 실행
Crontab 에서 일반적인 셸 스 크 립 트 를 호출 하 는 것 처럼(구체 적 인 Crontab 용법)PHP 프로그램 을 사용 하여 PHP 스 크 립 트 를 호출 합 니 다.매 시간 myscript.php 를 실행 하면 다음 과 같 습 니 다.

# crontab -e
00 * * * * /usr/local/bin/php /home/john/myscript.php
/usr/local/bin/phpPHP 프로그램의 경로 입 니 다.
2、Crontab 에서 URL 로 스 크 립 트 실행
PHP 스 크 립 트 가 URL 을 통 해 실 행 될 수 있다 면 lynx 나 curl 또는 wget 을 사용 하여 Crontab 를 설정 할 수 있 습 니 다.
다음 예 는 PHP 스 크 립 트 를 실행 하기 위해 Lynx 텍스트 브 라 우 저 를 사용 하여 URL 에 접근 하 는 것 입 니 다.Lynx 텍스트 브 라 우 저 는 기본적으로 대화 방식 으로 URL 을 엽 니 다.그러나 아래 와 같이 저 희 는 lynx 명령 행 에서-dump 옵션 을 사용 하여 URL 의 출력 을 표준 출력 으로 변환 합 니 다.

00 * * * * lynx -dump http://www.sf.net/myscript.php
아래 의 예 는 CURL 접근 URL 을 사용 하여 5 분 마다 PHP 스 크 립 트 를 실행 하 는 것 입 니 다.Curl 은 기본적으로 표준 출력 에 출력 을 표시 합 니 다."curl-o"옵션 을 사용 하면 스 크 립 트 의 출력 을 임시 파일 temp.txt 에 저장 할 수 있 습 니 다.

*/5 * * * * /usr/bin/curl -o temp.txt http://www.sf.net/myscript.php
다음 예 는 WGET 접근 URL 을 사용 하여 10 분 마다 PHP 스 크 립 트 를 실행 하 는 것 입 니 다.-q 옵션 은 조용 모드 를 표시 합 니 다."-O temp.txt 는 출력 이 임시 파일 로 보 내 는 것 을 표시 합 니 다.

*/10 * * * * /usr/bin/wget -q -O temp.txt http://www.sf.net/myscript.php
5.iniset 함수 용법 상세 설명PHP ini_setphop.ini 의 값 을 설정 하 는 데 사 용 됩 니 다.함수 가 실 행 될 때 유효 합 니 다.스 크 립 트 가 끝 난 후에 설정 이 실 효 됩 니 다.php.ini 파일 을 열지 않 아 도 설정 을 수정 할 수 있어 가상 공간 에 편리 합 니 다.
함수 형식:

string ini_set(string $varname, string $newvalue)
모든 매개 변 수 를 설정 할 수 있 는 것 이 아니 라 매 뉴 얼 의 목록 을 볼 수 있 습 니 다.
일반적인 설정:

@ ini_set('memory_limit', '64M');
menory_limit:스 크 립 트 가 신청 할 수 있 는 최대 메모리 바이트 수 를 설정 합 니 다.이것 은 잘못 쓴 스 크 립 트 가 서버 의 사용 가능 한 메모 리 를 소모 하 는 데 유리 합 니 다.@기 호 는 출력 오류 가 없 음 을 의미 합 니 다.

@ini_set('display_errors', 1);
display_errors:잘못된 정보의 분 류 를 설정 합 니 다.

@ini_set('session.auto_start', 0);
session.auto_start:자동 으로 session 처 리 를 할 지 여부 입 니 다.1 로 설정 하면 프로그램 에서 session 을 사용 하지 않 습 니 다.start()로 session 을 수 동 으로 열 어도 session 을 사용 할 수 있 습 니 다.
인자 가 0 이 고 세 션 을 수 동 으로 열지 않 으 면 오류 가 발생 합 니 다.

@ini_set('session.cache_expire', 180);
session.cache_expire:클 라 이언 트 cache 에 있 는 세 션 페이지 의 기한(분)이 180 분 으로 부족 합 니 다.session.cache 를 설정 하면limiter=nocache 시 설정 이 잘못 되 었 습 니 다.

@ini_set('session.use_cookies', 1);
session.use_cookies:쿠키 를 사용 하여 클 라 이언 트 에 세 션 ID 를 저장 할 지 여부;

@ini_set('session.use_trans_sid', 0);
session.use_trans_sid:URL 에 SID(세 션 ID)를 명시 적 으로 표시 할 지 여부 입 니 다.
기본적으로 금 지 됩 니 다.사용자 에 게 안전 위험 을 가 져 다 줄 수 있 기 때 문 입 니 다.
    사용 자 는 유효한 sid 를 포함 하 는 URL 을 이메일/irc/QQ/MSN 등 경 로 를 통 해 다른 사람 에 게 알려 줄 수 있 습 니 다.
    유효한 sid 를 포함 하 는 URL 은 공용 컴퓨터 에 저 장 될 수 있 습 니 다.
    사용 자 는 폴 더 나 탐색 기록 에 고정된 SID URL 을 저장 할 수 있 습 니 다.URL 기반 세 션 관 리 는 항상 쿠키 기반 세 션 관리 보다 위험 하기 때문에 사용 하지 않 아야 합 니 다.
PHP 정시 임 무 는 매우 재 미 있 는 것 이다.이상 은 본 고가 제공 한 해결 방안 이다.너 도 본 고의 사고방식 을 통 해 자신의 해결 방안 을 개발 할 수 있다.필요 하신 분 들 께 도움 이 됐 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기