it-swarm-korea.com

64 개 이상의 데이터가있는 본문을 어떻게 가질 수 있습니까? Kb)

본문 필드에 너무 많은 데이터가있는 노드를 만들면 후속 편집이 저장되지 않는다는 것을 알았습니다. 또는 저장이 진행되고 노드보기로 돌아가지만 내용은 변경되지 않았습니다.

광범위한 시행 착오 끝에 64 미만의 본문 길이를 가진 모든 저장 Kb 잘 저장되지만 그 이상은 저장되지 않음을 확인할 수있었습니다.

이 문제의 원인은 무엇이며이 문제를 해결할 수있는 방법이 있습니까?

3
Rimu Atkinson

문제의 원인은 PCRE가 pcre.backtrack_limit 또는 pcre.recursion_limit에 설정된 한계에 도달하도록하는 정규식 때문입니다.
drupal.org에 잘린 본문 내용에 대한 문제 보고서가 있습니다. 잘 리기 전에 입력 할 수있는 텍스트의 길이는 사용 된 문자 (영어 텍스트는 모든 유니 코드 문자를 포함하는 텍스트보다 길 수 있음)와 pcre.backtrack_limit 및 pcre.recursion_limit에 설정된 값에 따라 다릅니다.

내가 말하는 문제 보고서는 가능한 preg 메모리 문제 문서 입니다. Gerhard Killesreiter 님의 의견은 다음과 같습니다.

이 문제 [본문 내용이 잘림]은 유효한 UTF8을 게시했는지 확인하는 데 사용하는 Perl 정규 표현식의 제한 때문입니다.

Settings.php 파일에서 제한을 늘리면 텍스트가 표시됩니다.

ini_set('pcre.backtrack_limit', 200000);
ini_set('pcre.recursion_limit', 200000);

어떤 값이 자신에게 적합한 지 실험해야합니다.

node_schema () 는 node_revisions 테이블의 본문 필드를 "큰 텍스트"로 정의합니다. 즉, MySQL에서는 노드 본문의 최대 길이가 4GB이고 PostgreSQL에서는 (이론적으로) 제한이 없습니다. 두 경우 모두 제한은 관찰중인 64KB가 아닙니다.

Default.settings.php 파일에는 다음 주석이 포함되어 있습니다.

/**
 * If you encounter a situation where users post a large amount of text, and
 * the result is stripped out upon viewing but can still be edited, Drupal's
 * output filter may not have sufficient memory to process it.  If you
 * experience this issue, you may wish to uncomment the following two lines
 * and increase the limits of these variables.  For more information, see
 * http://php.net/manual/en/pcre.configuration.php.
 */
# ini_set('pcre.backtrack_limit', 200000);
# ini_set('pcre.recursion_limit', 200000);
8
kiamlaluno

Suhosin이 활성화 된 사이트의 경우 POST value lenght.

suhosin.post.max_value_length=65000는 Suhosin의 기본값입니다 (추가 할 때까지 /etc/php5/conf.d/suhosin.ini에 없을 수도 있음).

이 설정은 phpinfo()의 출력에 표시됩니다.

2
Chris Burgess

일부 배포에는 보안의 이름으로 들어오는 요청에 대한 추가 제한을 적용하는 패치가 포함되어 있습니다. 데비안이 PHP에 포함하는 보안 패치에 의해 시행 된 제한을 증가시킴으로써 해결 된 "너무 많은"매개 변수가 포함 된 웹 양식 제출에 문제가있었습니다.

PHP 및/또는 HTTP 서버 오류 로그에서 너무 긴 요청에 대한 언급 등을 찾을 수 있는지 확인하는 것이 좋습니다.

0
thsutton