지난주 Harvey Hardware Network가 새로운 보도자료 플랫폼으로 전환한 후, 일시적인 필요로 인해 원래의 뉴스 플랫폼이 완전히 중단되지 않았기 때문에 새로운 플랫폼이 사용되기 시작한 이후에 웹사이트의 홈페이지가 발견되었습니다. 항상 원본 시스템 콘텐츠로 업데이트되어 결국 특정 뉴스 링크에 정상적으로 액세스할 수 없게 됩니다. 새로운 시스템에서는 URL이 최적화되었으며, 뉴스 페이지의 URL은 기존 시스템과 다릅니다. 처음에는 누군가가 기존 시스템을 계속 사용하고 있어서 그런가 싶었는데, 다음날에도 상황이 계속 발생해서 예전 시스템의 문제가 아닐까 생각했습니다. 나중에 확인해보니 Empire CMS 시스템에는 문제가 있는 것으로 나타났습니다. 홈페이지 새로고침 작업이 기본으로 되어 있어서 취소하고 그 이후에는 홈페이지가 정상적으로 업데이트 됩니다.
이 문제를 해결한 후 나는 PHP 작업에 관심을 가지게 되었지만, 웹사이트 시스템 개발에 있어서 이 기능이 얼마나 중요한지 생각해 본 적이 없었습니다. 향후 적용을 위한 성숙한 코드입니다.
첫 번째는 온라인에서 관련 정보를 검색하는 것입니다. 이 정보를 읽으면서 PHP 작업이 대략 세 가지 범주로 나눌 수 있다는 것을 알았습니다.
서버 예약 작업
WIN 서버는 예약된 작업을 직접 이용하여 관련 애플리케이션을 실행할 수 있고, 리눅스 서버는 /etc/crontab에 예약된 작업을 추가하여 구현할 수 있다.
무한 루프를 통한 자동 작업 실행
프로그램 파일 페이지를 생성하고,ignore_user_abort를 사용하여 브라우저 페이지를 닫은 후 실행 가능하도록 설정하면 프로그램 페이지 실행 후 필요한 작업 계획이 항상 자동으로 실행됩니다. 일반 PHP 프로그래머의 경우 자신감이 없으면 이 작업은 허용되지 않습니다. 무한 루프로 인해 서버가 쉽게 충돌할 수 있기 때문입니다.
트리거된 예약된 작업
Discuz, Empire CMS 등 내가 아는 여러 프로그램 중에서는 모두 이 방법을 사용하여 시스템의 예약된 작업을 완료합니다. 이전 두 가지 방법과 비교할 때 이 방법이 가장 안전하고 간단합니다.
선택의 폭이 너무 많기 때문에 프로그램을 설계할 때 실제 요구 사항에 따라 가장 적절한 프로그래밍 방법을 선택해야 합니다. 예시를 통해 소개하겠습니다.
AiLiterature.com의 e-매거진은 홈페이지 오픈 직후에 제작되었으며, e-매거진의 최신호를 구독자의 메일함으로 보내는 것은 단순한 일괄 작업입니다. 페이지 전송이 작동하지 않는 것 같습니다. 주된 이유는 현재 News, Tencent 및 163에서 제공하는 메일함과 같은 자체 메일 서버가 없기 때문입니다. 이메일 전송을 위해 SMTP를 지원하지만 대량 이메일 전송은 허용하지 않습니다. 조건이 제한되어 있습니다. 그래서 이 문제는 프로그램을 통해서만 해결될 수 있습니다.
우선, 이메일을 보내는 프로그램이 사용자의 웹사이트 방문 경험, 주로 웹사이트 페이지 열기 속도에 영향을 미치는 것을 방지하기 위해 트리거를 구현하기 위해 Ajax를 선택했습니다. 공개 JS 파일에 트리거 기능을 추가하면 사용자가 페이지를 방문할 때 이메일 전송 작업을 트리거할 수 있습니다.
이메일 전송 빈도를 제한하고 너무 빈번한 이메일 전송으로 인해 메일 서버에서 차단되는 것을 방지하기 위해 프로그램에 시간 제한도 설정하여 RAND를 사용하여 대기 시간을 무작위로 생성하는 문제를 해결합니다. 실제로 트리거 모드의 간격은 시간이 본질적으로 불확실하지만 웹 사이트의 방문 수가 많은 경우 여전히 이러한 문제가 발생할 수 있으므로 여기에 설정을 추가하는 것이 더 안전합니다. 관심.
위의 조치에도 불구하고 실제 애플리케이션에서는 여전히 메일 서버에서 이메일 발송이 금지되는 것으로 확인되지만 영구적으로 금지되는 것은 아닙니다. 이 문제를 해결하는 방법은 서로 다른 메일 서비스의 SMTP 매개변수를 저장하는 배열을 만드는 것입니다. 하나의 메일 서버가 메일을 정상적으로 보낼 수 없으면 자동으로 다른 메일 서버로 이동합니다.
수집된 이메일 주소 목록에는 잘못된 주소가 일부 있습니다. 이메일 전송 과정에서 한 번 실패하면 다른 이메일 서버로 전환하여 다시 전송하세요. 이 이메일 주소를 '잘못된 경우'로 설정하세요. , 앞으로는 이 주소로 더 이상 이메일이 전송되지 않으므로 이메일 주소 목록의 효율성이 향상되고 다음에 이메일을 보낼 때 시간이 절약됩니다.
어떤 친구들은 제가 이런 유형의 블로그에서 너무 인색하고 코드를 너무 적게 공유한다고 말합니다. 실제로 인터넷에서 정보를 검색해 보면 많은 웹사이트에서 공유하는 코드가 꼭 실용적이지는 않다는 것을 알게 될 것입니다. 이런 코드들을 참고하다 보니 시간이 많이 늦어져서 정리할 때, 나중에 비슷한 문제가 발생할 때 참고할 수 있도록 문제 해결 방법을 요약하고 핵심 기술 매개변수를 적어두는 경우가 많습니다. 이와 관련하여 문의사항이 있으시면 메시지나 이메일로 연락주실 수 있습니다.
작가 Happy Boy의 개인 공간