2012-01-29 2 views
0

PHP와 Cron Job을 사용하여 정기적으로 스타일 시트를 동적으로 업데이트합니다 (여러 가지 이유로 Javascript는 옵션이 아닙니다). 이것은 내가 크론 작업으로 실행 해요 스크립트입니다 :Cron Job이 PHP 배열을 인식하지 못합니다.

<?php 
$colorstack = json_decode(file_get_contents("colors.txt")); 
$color = array_shift($colorstack); 
file_put_contents("color.txt",$color); 
array_push($colorstack, $color); 
$colors = json_encode($colorstack); 
file_put_contents("colors.txt", $colors); 

$iconstack = json_decode(file_get_contents("icons.txt")); 
$icon = array_shift($iconstack); 
file_put_contents("icon.txt",$icon); 
array_push($iconstack, $icon); 
$icons = json_encode($iconstack); 
file_put_contents("icons.txt", $icons); 

print_r ($colorstack); 
print_r ($iconstack); 
?> 

그것은 두 개의 텍스트 파일 (16 진수 코드 세트 및 이미지 파일 이름의 집합)에서 문자열을 반환하고 배열로 넣습니다. 그런 다음 각 배열에서 첫 번째 값을 가져 와서 두 번째 텍스트 파일 세트 (css.php로 읽음)에 쓴 다음 해당 값을 배열 끝에 다시 붙여 텍스트 파일에 다시 씁니다.

스크립트가 실행될 때마다 스타일 시트에 대한 새로운 색상 16 진 코드와 이미지 파일 이름을 작성하고 이전 파일을 루프의 뒷면으로 보냅니다. 나는 그것을 테스트했고, 브라우저에서 정상적으로 작동한다.

문제는 Cron 작업이 스크립트를 실행하지 않는다는 것입니다.) (예상합니다 array_push :

경고 : array_shift() 매개 변수 1가 null 줄에 /path/to/file.php 3

경고 지정된 배열이 될 것으로 기대 대신에, 나는 다음과 같은가 계속 매개 변수 1 배열로,/경로/to/file.php 5 행에 주어진 null

등등. 분명히 문제는 Cron Job이 배열로 $_____stack = json_decode(file_get_contents("_____.txt"));을 파싱하지 않는다는 것입니다. 그리고 나는 explode()에서도 똑같이 할 것이라고 가정합니다; JSON 대신에

텍스트 파일의 내용을 동일한 문제가 발생하지 않는 배열로 가져 오는 비교적 깔끔한 방법이 있습니까?

+0

cron 작업이 시작되는 디렉토리가 동일한 디렉토리 일 가능성이 없습니다. getcwd()를 사용하여 브라우저의 현재 디렉토리를 확인하고 cron 작업의 함수 출력과 비교하십시오. – CBusBus

답변

1

이것은 경로 문제로 보입니다. cronjob은 시스템 프로세스로 실행되므로 "colors.txt"및 "icons.txt"파일을 찾을 수 없습니다.

그러나 브라우저에서 스크립트를 실행하면 자동으로 현재 폴더에서 파일을 읽습니다.

해결 방법은 cronjob에있는 파일의 전체 시스템 경로를 제공하는 것입니다. 그리고 일반적으로 cron 스크립트에서 파일 읽기 - 쓰기를 수행 할 때는 항상 전체 경로를 사용하십시오.

$filePath = ''; // set it to full-path of the directory that contains the .txt files and terminate with a "/" (slash) 
.... 
$colorstack = json_decode(file_get_contents($filePath . "colors.txt")); 
.... 
$iconstack = json_decode(file_get_contents($filePath . "icons.txt")); 

는 희망이 도움이 :

이 다음은 샘플 코드입니다!

+0

웬일인지 그다지 이해하지 못했지만 결국에는 file_get 및 file_put 명령의 전체 경로를 포함 시켜서 작업하도록했습니다. 건배! – Sophie

관련 문제