새로 설치시 PHP 경고 (연결 시간 초과)


10

새로운 WordPress 3.4.1 설치 (노르웨이어)에 액세스 할 때이 PHP 경고가 표시됩니다.

경고 : fopen (URL_TO_MY_WORDPRESS_PAGE / wp-cron.php? doing_wp_cron = 1341476616.7605190277099609375000) : 스트림을 열지 못했습니다 : PATH_TO_MY_WP_FILES / wp-includes / class-http.php 라인 923에서 열지 못했습니다.

물론 개발 서버에서 실행 되므로 WP_DEBUG플래그가로 설정되어 true있습니다.

여기에 이미지 설명을 입력하십시오

이것은 간헐적으로 발생하므로에 문제가있는 것 같습니다 wp-cron.

WordPress에 오류가 있거나 서버에 문제가 있습니까? 걱정해야합니까?

서버는 LAMP 스택이 포함 된 최신 Ubuntu Server 12.04 VM입니다.

구글 검색은 내가 이것을 경험하는 유일한 사람이 아님을 보여준다. (실제 오류를 보려면 버퍼링 / 인덱싱 된 페이지 버전을 참조하십시오.)

편집 : 나는 또한 같은 페이지의 PHP 경고를 받고 있습니다. 웹 서버가 NAT되고 있다는 사실과 관련이있을 수 있습니까? 현재 개발 서버에서 포트 19235를 80으로 가리 키도록 방화벽을 설정했습니다.


php.ini 파일에서 allow_url_fopenON 으로 설정되어 있습니까?
its_me

예,allow_url_fopen = On
ohaal

답변:


10

대답은 분명히 그렇습니다 . 걱정해야합니다 . 일부 조사 결과, 경고가 WordPress가 호스팅되는 서버의 구성 오류 (예 : WordPress가 아닌 서버 문제)와 관련이있는 것으로 나타났습니다.

일반적인 구성 오류 :

  1. 서버에는 DNS가 없으므로 "example.com"자체가 누구인지 알아낼 수 없습니다.
  2. 잘못된 보안 시도로 서버 관리자가 "루프백"요청을 차단하여 실제로 자신에게 전화를 걸 수는 없습니다.
  3. 서버가 "mod_security"또는 이와 유사한 것을 실행 중이며, 이는 뇌사 구성으로 인해 호출을 적극적으로 차단합니다.

필자의 경우 문제는 실제로 방화벽 (pfSense)으로 인해 발생 했으며 기본적으로 "NAT 리플렉션 사용 안함" (일반적인 이유 # 2로 표시)이 있습니다.

서버 자체에서 텔넷을 사용하여 연락하려고 시도한 결과는 다음과 같습니다.

$ telnet external.server.hostname.com 19235
XXX.XXX.XXX.XXX 시도 중 ...
텔넷 : 원격 호스트에 연결할 수 없음 : 연결 시간 초과

이 문제를 해결하려면 방화벽에서 NAT 리플렉션 비활성화 를 선택 해제 해야합니다 . 필자의 경우 이것은 System-> Advanced-> Firewall / NAT 아래의 pfSense 웹 인터페이스에있었습니다.
출처 : http://forum.pfsense.org/index.php?topic=3473.0

여기에 이미지 설명을 입력하십시오

이제 방화벽을 통해 서버 자체에서 나 자신에게 연결할 수 있습니다.

$ telnet external.server.hostname.com 19235
XXX.XXX.XXX.XXX 시도 중 ...
external.server.hostname.com에 연결되었습니다.
이스케이프 문자는 '^]'입니다.

더 이상 wp-cron에 대한 PHP 경고가 표시되지 않습니다.


대한 자세한 답변 을 읽은 후 어떻게 작동하는지 설명 하면서이 사실을 알았 습니다.wp_cron

짧은 대답 : 이것을 wp-config.php 파일의 정의에 추가하십시오 : define ( 'ALTERNATE_WP_CRON', true);

마조히스트에게는 정말 긴 대답 : 예약 된 게시물은 지금은 아니고 "깨진"적이 없습니다. 수정해야 할 것이 없으므로 WordPress 개발자가 수정할 수 없습니다.

문제는 서버가 어떤 이유로 wp-cron 프로세스를 제대로 실행할 수 없다는 사실에 있습니다. 이 프로세스는 WordPress의 타이밍 메커니즘으로, 예약 된 게시물에서 핑백을 XMLRPC 핑으로 보내는 등 모든 것을 처리합니다.

작동 방식은 매우 간단합니다. WordPress 페이지가로드 될 때마다 내부적으로 WordPress는 현재 시간을 wp-cron이 마지막으로 실행 된 시간과 비교하여 wp-cron을 종료해야하는지 확인합니다. wp-cron을 실행해야하는 경우 wp-cron.php 파일을 호출하여 HTTP 연결을 다시 시도합니다.

그 자체로의 연결은 이유가 있습니다. wp-cron은해야 할 일이 많으며 그 작업에는 시간이 걸립니다. 많은 작업을 수행하는 동안 사용자가 자신의 웹 페이지를 보는 것을 지연시키는 것은 나쁜 생각이므로 다시 연결하여 별도의 프로세스로 wp-cron 프로그램을 실행할 수 있습니다. WordPress 자체는 wp-cron의 결과에 신경 쓰지 않으므로 잠시 기다렸다가 사용자를 위해 웹 페이지 렌더링으로 돌아갑니다. 한편, wp-cron은 시작되거나 완료 될 때까지 또는 실행 시간이 부족할 때까지 작업을 수행합니다.

이 HTTP 연결은 잘못 구성된 일부 시스템이 실패하는 곳입니다. 기본적으로 WordPress는 웹 브라우저처럼 작동합니다. 사이트가 http://example.com/blog 인 경우 WP는 http://example.com/blog/wp-cron.php 를 호출 하여 프로세스를 시작합니다. 그러나 일부 서버는 어떤 이유로 든 그렇게 할 수 없습니다. 가능한 이유 중 :

  1. 이 "example.com"누구인지 알아낼 수 없도록 Server는 경우에도 DNS를 가지고 있고,하지 않습니다 자체 .
  2. 잘못된 보안 시도로 서버 관리자가 "루프백"요청을 차단하여 실제로 자신에게 전화를 걸 수는 없습니다.
  3. 서버가 "mod_security"또는 이와 유사한 것을 실행 중이며, 이는 뇌사 구성으로 인해 호출을 적극적으로 차단합니다.
  4. 다른 것.

요점은 어떤 이유로 든 웹 서버가 비표준 방식으로 구성되어 WordPress가 작업을 수행하지 못하게한다는 것입니다. 워드 프레스는 단순히 그것을 고칠 수 없습니다.

그러나이 조건이 있으면 해결 방법이 있습니다. 이것을 wp-config.php 파일의 정의에 추가하십시오 :

define ( 'ALTERNATE_WP_CRON', 참);

이 대체 방법은 리디렉션 방법을 사용하므로 크론을 실행해야 할 때 사용자 브라우저가 리디렉션을 받도록하여 방금 연결에서 크론이 계속 실행되는 동안 사이트로 즉시 돌아옵니다. 이 방법은 때때로 다소 불편하기 때문에 이것이 기본값이 아닙니다.

출처 : http://wordpress.org/support/topic/scheduled-posts-still-not-working-in-282#post-1175405

이 크고 자세한 게시물에서 언급했듯이 서버 구성 또는 해당되는 경우 환경을 제어 할 수없는 경우 해결 방법은 다음과 같습니다.

define ( 'ALTERNATE_WP_CRON', 참);

wp-config.php 파일에.


3
아주 좋은 보고서!
brasofilo

2
사람들이 자신의 문제를 해결할 때는 좋지만 솔루션을 포기하기 위해 돌아올 때는 굉장합니다. @ ohaal 이제 모든 것이 괜찮습니까?
its_me

1
@AahanKrish : 그 결과, 방아쇠가 약간 빨랐습니다. 문제는 처음 예상했던 것보다 조금 더 복잡했다. 범인은 아파치 2 오류가 처음에 예상 한대로 아니었다. 세부 사항으로 답변을 업데이트했습니다.
ohaal
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.