PHP로 사이트를 만들고 정적 버전을 생성하려면 어떻게 해야 합니까?

StackOverflow https://stackoverflow.com/questions/66610

  •  09-06-2019
  •  | 
  •  

문제

내가 가지고 있는 특정 프로젝트의 경우 서버 측 코드가 허용되지 않습니다.PHP(포함, 조건 등 포함)로 웹 사이트를 생성한 다음 클라이언트에 제공할 수 있는 정적 HTML 사이트로 변환하려면 어떻게 해야 합니까?

업데이트:wget을 제안해주신 모든 분들께 감사드립니다.그것이 내가 사용한 것입니다.PC를 사용하고 있음을 지정했어야 했기 때문에 여기에서 Windows 버전을 가져왔습니다. http://gnuwin32.sourceforge.net/packages/wget.htm.

도움이 되었습니까?

해결책

사용 가능한 Linux 시스템이 있는 경우 wget:

wget -k -K  -E -r -l 10 -p -N -F -nH http://website.com/

옵션

  • -k :링크를 상대 링크로 변환
  • -K :wget으로 변환하지 않고 파일의 원본 버전을 유지합니다.
  • -E :html 파일 이름을 .html로 바꿉니다(아직 htm(l) 확장자가 없는 경우).
  • -r :재귀적… 물론 우리는 재귀적 복사본을 만들고 싶습니다.
  • -l 10 :최대 재귀 수준.매우 큰 웹사이트가 있는 경우 더 높은 숫자를 입력해야 할 수도 있지만 10레벨이면 충분합니다.
  • -p :각 페이지에 필요한 모든 파일(css, js, 이미지)을 다운로드하세요.
  • -N :타임스탬프를 켭니다.
  • -F :파일에서 입력을 읽을 때 강제로 HTML 파일로 처리합니다.
  • -nH :기본적으로 wget은 사이트의 호스트 이름을 따서 명명된 디렉터리에 파일을 저장합니다.이렇게 하면 해당 호스트 이름 디렉터리 생성이 비활성화되고 모든 것이 현재 디렉터리에 저장됩니다.

원천: Jean-Pascal Houde의 웹로그

다른 팁

나는 과거에 다음을 추가하여 이 작업을 수행했습니다.

ob_start();

페이지 상단과 바닥글:

$page_html = ob_get_contents();
ob_end_clean();
file_put_contents($path_where_to_save_files . $_SERVER['PHP_SELF'], $page_html);

HTML을 파일로 굽기 전에 .php 확장자를 .html로 변환할 수 있습니다.변수가 있는 여러 페이지를 생성해야 하는 경우 매우 쉬운 옵션 중 하나는 모든 GET 변수의 md5sum을 파일 이름에 추가하는 것입니다. HTML에서도 해당 변수를 변경하기만 하면 됩니다.따라서 다음을 변환할 수 있습니다.

somepage.php?var1=hello&var2=hullo

에게

somepage_e7537aacdbba8ad3ff309b3de1da69e1.html

추악하지만 작동합니다.

때로는 PHP를 사용하여 일부 기능을 에뮬레이션하기 위한 자바스크립트를 생성할 수 있지만 이는 매우 쉽게 자동화될 수 없습니다.

사이트를 구축한 다음 다음과 같은 미러링 도구를 사용하세요. wget 또는 lwp-미러 정적 복사본을 가져오려면

정상적으로 사이트를 만든 다음 스파이더링 소프트웨어를 사용하여 HTML 사본을 생성합니다.

HT트랙 내가 전에 사용했던 소프트웨어입니다.

이를 수행하는 한 가지 방법은 평소와 같이 PHP에서 사이트를 생성하고 스크립트가 실제로 웹 페이지를 가져오도록 하는 것입니다(HTTP를 통해 - wget을 사용하거나 URL과 함께 file()을 사용하는 다른 PHP 스크립트를 작성할 수 있음). "완료"되면 공개 웹사이트 위치.그런 다음 페이지를 다시 변경하기로 결정하면 스크립트를 다시 실행할 수 있습니다.이 방법은 라이브 사이트에서 모든 SQL 쿼리를 제거할 수 있으므로 데이터베이스가 느리게 변경되고 트래픽이 많을 때 매우 유용합니다.

modx를 사용하는 경우 정적 파일을 내보내는 기능이 내장되어 있습니다.

모든 종류의 요청 변수 등이 포함된 여러 페이지가 있는 경우 아마도 다른 댓글 작성자가 언급한 스파이더링 도구(wget, lwp-mirror 등) 중 하나가 가장 쉽고 강력한 솔루션이 될 것입니다.

그러나 가져와야 하는 페이지 수가 적거나 최소한 다루기 쉬운, 타사 도구가 필요하지 않은 몇 가지 옵션이 있습니다(타사 도구라는 이유만으로 할인해야 하는 것은 아닙니다).

  1. 명령줄에서 php를 사용하여 파일로 직접 출력할 수 있습니다.

    php myFile.php > myFile.html

    이 방법을 사용하면 고통스러울 수 있으며(모든 것을 쉘 스크립트에 넣을 수는 있지만) 동일한 방식으로 변수를 전달할 수 없습니다(예: php myFile.php?abc=1 작동하지 않습니다).

  2. 원하는 모든 URL 목록을 포함하고 다음을 통해 가져오는 "빌드" 스크립트로 다른 PHP 파일을 사용할 수 있습니다. file_get_contents() 또는 file() 로컬 파일에 씁니다.이 방법을 사용하면 파일이 변경되었는지 확인할 수도 있습니다(md5_file() 작동해야 함) 클라이언트가 업데이트만 원하는 경우 클라이언트에게 무엇을 제공해야 할지 알 수 있습니다.

  3. #2에 더해, 출력을 파일에 쓰기 전에 로컬 URL을 검색한 다음 다운로드할 파일 목록에 추가하세요.그곳에 있는 동안 해당 URL을 변경하여 최종적으로 출력 이름을 지정할 항목에 연결하면 마지막에 작동하는 웹을 갖게 됩니다.여기서 주의할 점 - 이것이 좋게 들리면 아마도 이미 존재하는 도구 중 하나를 사용하여 이 작업을 수행할 수 있습니다.

wget 대신 (Win|Web)HTTrack(웹사이트) 정적 페이지를 가져옵니다.HTTrack은 정적 출력과 일치하도록 파일 및 문서에 대한 링크도 수정합니다.

나는 변경되지 않는 것이 보장된 특정 페이지에 대해 내 자신의 웹 사이트에서 이 작업을 수행합니다. 간단히 끓일 수 있는 쉘 스크립트를 실행합니다(경고:bash 의사코드):

find site_folder -name \*.static.php -print -exec Staticize {} \;

Staticize는 다음과 같습니다.

# This replaces .static.php with .html
TARGET_NAME="`dirname "$1"`/"`basename "$1" .static.php`".html
php "$1" > "$TARGET_NAME"

wget은 아마도 가장 완벽한 방법일 것입니다.이에 대한 액세스 권한이 없고 템플릿 기반 레이아웃이 있는 경우 Savant 3 사용을 고려해 볼 수 있습니다.저는 Smarty와 같은 다른 템플릿 시스템보다 Savant 3를 적극 권장합니다.

Savant는 매우 가볍고 일부 독점 하위 언어가 아닌 PHP를 템플릿 언어로 사용합니다.검색하려는 명령은 fetch()입니다. 이 명령은 템플릿을 "컴파일"하여 출력할 수 있는 변수에 배치합니다.

http://www.phpsavant.com/

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