2013-06-10 1 views
0

내 PHP 스크립트는 다음 실행에 포함하기 위해 텍스트 파일 (실제 PHP 코드 작성)을 작성해야합니다. 그래서 나는 데이터베이스를 사용하지 않고 모든 데이터 (배열)를 previus에서 실행했습니다. 파일은 네트워크 드라이브 (SAN)에 저장됩니다. 이 스크립트는 초 (약마다 300 milisecs)와 파일의 크기에 3 ~ 4 번을 실행php가 네트워크 드라이브에 큰 문자열을 쓸어 버리거나, 정크 또는 누락 된 부분을 넣습니다.

이 파일의 마지막에 누락 된, 1.2 (약) MB

파일이 손상된 일부 배 (EOF)

언젠가는 내가 (문자열의 repetead 부분)

예를 들어 텍스트의 정크를 얻을.

$write_string = '$arrMK[1][1]=1.80;$arrMK[1][2]=1.82;$arrMK[1][3]=2.14;$arrMK[1][4]=1.80;$arrMK[2][1]=2.43;$arrMK[2][2]=1.13;$arrMK[2][3]=1.33;$arrMK[2][4]=4.11;... and so on...'; 

및 파일의 내용이 같다 (굵은 글씨는 repeted 일부) : 파일 크기가 1MB 미만이면

$arrMK[1][<strong>1]=1.80;$arrMK[1][2]</strong>=1.82;$arrMK[1][3]=2.14;$arrMK[1][4]=1.80;$arrMK[2][1]=2.43;$arrMK[2][2]=1.13;$ar<strong>1]=1.80;$arrMK[1][2]</strong>rMK[2][3]=1.33;$arrMK[2][4]=4.11; 

, 모든 것이 OK입니다.

동일한 결과를 사용하여 fopen/fwrite, file_put_contents를 사용해 보았습니다. 그것에 대해 어떤 제안이 있습니까? 엘리아스

+0

매번 같은 출력 파일로 다시 쓰지는 않습니다. 그렇지? 이 경우 다른 PHP 프로세스에서 파일을 읽는 동안 파일을 읽을 수 있습니다. 이 경우 잠금 메커니즘 (파일 시스템이 지원하는 경우 flock()과 같은 파일 시스템 잠금을 사용하거나 자체 응용 프로그램 잠금 체계를 작성)을 사용할 수 있습니다. – dAm2K

+0

Nop. 나는 매번 새로운 것을 쓰고, 옛 것을 지워 버린다. –

+0

파일 시스템은 클러스터 노드 Linux 설치 사이의 디스크 공간을 공유하는 GFS2 (글로벌 파일 시스템 II)입니다. –

답변

0

는 사용자가 그것을 필요로하기 전에 PHP 스크립트가 쓰기 작업을 완료 할 수 없습니다 수 있음. 스크립트에서 fflush() 및 fclose()를 호출하여 파일이 올바르게 닫혔는지 확인하십시오.

PHP가 파일을 올바르게 저장하지 못하게하는 PHP 시간 초과/조정 문제에주의하십시오. 너무 오래된 파일을 지우는 것을 잊지 마십시오. 그렇지 않으면 sysadmin이 조만간 당신을 죽일 것입니다 ...

어쨌든 그것은 아주 못생긴 방식입니다. 세션을 사용하여 사용자 상태 및 환경을 저장할 수 있습니다 (session_start 확인)

+0

스크립트는 외부 소프트웨어에서 호출 (실행)됩니다. 세션을위한 클라이언트 (웹 브라우저)가 없습니다. 각 호출 (조회 스크립트)은 diff 세션입니다. 또한 여러 스크립트 (포함)에서 사용되는 내 보낸 데이터 (PHP 코드로). 스크립트가 70-80 밀리 초 동안 실행되기 때문에 스크립트 시간 초과에 문제가 없습니다. fclose를 사용해야합니다. 나는 fflush를 다루려고 노력할 것이다. 시간 내 줘서 고마워 –

관련 문제