문제

나는 꽤 복잡합니다 index.php 이제 매시간 한 번만 실행하고 싶습니다. 이것을 달성하는 가장 좋은 방법은 무엇입니까? 내가 가진 몇 가지 아이디어

  • APC에 넣으십시오 apc_store($page, 60*60*) - 이것이 APC의 것이 아니라고 생각하고 아마도 내 사이트의 다른 부분에 나쁜 일을 할 것입니다.
  • 어딘가에 파일 시스템에 출력을 저장하십시오. 그러면 Apache가 통증이 될 수있는 어딘가에 글을 쓰는 것이 필요합니다.
  • 어쨌든 Apache가 나를 위해 캐싱을 수행하도록 설정합니다. 이것이 가능합니까?
도움이 되었습니까?

해결책 3

나는 Rowlf와 Jamietelin의 대답에 약간의 변형 을가했습니다.

3 개의 파일 작성 :

index.html

<meta http-equiv="refresh" content="0;url=/index_update.php" />

인덱스 .php

<?php // do all your normal stuff ?>

index_update.php

<?php

$file = "index.html";
$time = 60 * 10 - (time() - filemtime($file));

# this is on the first install 
if (filemtime($file) != filectime($file))
    $time = 0;

if ($time > 0) {
    die("Data was already updated in the 10 minutes. Please wait another " . ($time) . " seconds.");
}

ob_start();
require "index.php";
$data = ob_get_contents();

$fp = fopen($file, "w");
fwrite($fp, $data);
fclose($fp);

header("Location: /");

그리고 Cronjob :

*/15 * * * * curl http://example.com/index_update.php

따라서, 제작 푸시 후 누군가가 페이지에 우연히 발견되면, 그들은 당신을 위해 새로운 index.html을 투명하게 만들 것입니다. 그렇지 않으면, 당신의 cronjob은 15 분마다 그것을 만들 것입니다.

그냥 확인하십시오 index.html Apache 서버에서 쓸 수 있습니다. 무섭게 들리면 Cronjob을 실행하십시오. php index_update.php 쓰기 특권을 가진 다른 사용자로서 index.html. 그래도 모든 Apache 환경에 액세스 할 수는 없습니다.

이것이 도움이되기를 바랍니다. 의견을 환영합니다.

다른 팁

  1. 방문자가 페이지를 치면 콘텐츠를 생성하고 사용자에게 보내고 디스크 어딘가에 정적 파일을 저장하십시오.
  2. 다음 방문자가 오면 먼저 저장된 파일을 찾아서 존재하는 경우 index.php 파일의 모든 코드를 실행하는 대신 제공하십시오. 기본적인 예입니다

    if (file_exists($cacheFileName))
    {
        require $cacheFileName;
        exit;
    }
    
    // here goes the rest of your index.php code
    //..
    
    // assuming your output is buffered and is contained in $output:
    echo $output;
    
    $cacheFileName = '/path/to/your/file.inc';
    file_put_contents($cacheFileName, $output);
    
  3. 저장된 캐시 파일을 매시간 또는 필요한만큼 자주 디스크에서 삭제하는 Cron 작업을 설정하십시오. 또는 INDEX.PHP에서 모든 페이지에서 캐시 된 파일이 얼마나 오래 생성되었는지 확인하고 원하는 것보다 더 길면 새 캐시 파일을 생성합니다. 그래도 Cron 작업은 설정하기가 더 쉽습니다.

깊은 철학적 질문에 답하기 위해, 별도의 파일로 디스크에 생성 된 출력을 저장하는 것이 타사 캐싱 솔루션에 의존하고 싶지 않다면 아마도 가장 좋은 방법 일 것입니다. APC는 필요할 때 페이지를 재생하는 코드를 캐싱하는 데 적합하며 소규모 (ISH) 응용 프로그램에 대해 이야기하는 경우 Memcached는 확실히 과잉입니다.

정적 페이지를 전달하는 것은 항상 가장 최적화 된 방법입니다. 따라서 CRON 또는 선택한 기타 스케줄 서비스를 사용하여 한 시간에 한 번 정적 인덱스 버전을 생성하고 파일, 예제 index.html에 작성하도록하십시오. 색인에 여전히 동적 부품이 필요한 경우 .php로 생성 할 수도 있습니다.

나는 이것이 절대적인 최선의 방법이라고 말할 것입니다. 물론 파일의 CHMOD 설정을 처리하는 것은 약간의 고통이지만 그렇게 큰 문제는 아닙니다.

당신은 정말로 살펴 봐야합니다 memcached (훌륭한 PHP 지원하다.)

또 다른 좋은 옵션은 a를 설정하는 것입니다 오징어 캐시 서버.

페이지를 정적 파일에 저장하고 .htaccess 규칙을 사용하여 정적 페이지를 제공하십시오.

정확한 세부 사항은 확실하지 않지만 Codeignitor와 Drupal의 부스트가 그렇게한다고 생각합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top