>  기사  >  类库下载  >  PHP 명령줄 프로그램 작성에 대한 최근 경험

PHP 명령줄 프로그램 작성에 대한 최근 경험

高洛峰
高洛峰원래의
2016-10-14 10:16:581270검색

php, php, 네, 여전히 php입니다. php 관련 글을 네 개나 썼는데(>, >, >, >) 아직은 아닌 것 같아요. 충분하지만 지난 6개월 동안 PHP로 명령줄 프로그램을 작성하면서 겪은 경험을 요약하고 싶습니다. 검토 과정에서 저도 승화되고 개선되기를 바랍니다.
간략한 검토입니다. 작성됨:
1. PHP 프로그램을 스스로 실행하게 하세요
여기서 언급한 PHP '직접 실행'은 PHP를 바이너리 코드로 컴파일하여 실행 권한을 갖게 한다는 의미가 아닙니다. PHP에: #!/usr/bin/php를 입력한 다음 chmod를 통해 파일 실행 권한을 부여하면 실행할 때마다 파일 앞에 php를 추가할 필요가 없습니다. 자세한 내용은 을 참조하세요. >.
2. 프로그램이 현재 점유된 터미널을 포기하도록 합니다.
프로그램을 실행하는 데 오랜 시간이 걸리거나 단순히 항상 실행해야 하는 경우 이를 백그라운드에 두려면 실행할 때 배경에 넣으려면 끝에 &를 추가하거나 화면이나 tmux를 실행하고 실행하세요. 그러나 이러한 방법은 항상 매우 난해하게 느껴집니다. 자세한 내용은 >을 참조하세요.
3. 수동으로 데이터를 입력하는 것 외에도 다른 사람으로부터 데이터를 받을 수도 있습니다.
Linux 세계에서는 큰 영광입니다. 다른 작은 프로그램으로 임무를 완료하세요~ 어떻게 해야 하나요? 자세한 내용은 >
를 참조하세요. '과거를 복습하고 새로운 것을 배우면 새로운 것을 배울 수 있습니다. ' 과거를 검토한 결과 새로운 것을 배운 것이 없다는 것을 알았으니 계속해서 새로운 것에 대해 이야기합시다. 그렇죠 :) 저는 개인적으로 현재의 PHP 스크립팅 기술이 매우 성숙하고 완벽하며 배우고 사용하기 쉽다고 생각합니다. PHP를 사용하여 명령줄 스크립트를 작성할 때 주로 백그라운드 서비스와 명령줄 프로그램이라는 두 가지 방향으로 사용합니다. 왜냐하면 백그라운드 서비스는 항상 서버에서 실행되고 있어야 하기 때문입니다. 메모리, 코드 최적화에 특별한 주의를 기울여야 합니다. 명령줄 프로그램의 일부 항목은 백그라운드 서비스에 직접 적용될 수 있습니다. 연습을 시작해 보겠습니다.
백그라운드 서비스:
1. background
백그라운드 서비스로 합의했습니다. 그래도 현재 단말기를 점유하시겠습니까? 순순히 백그라운드로 이동하세요 :)
2. 장기기억
첫 번째 포인트, 프로그램 오랫동안 실행해야 하기 때문에 while(0)에만 배치할 수 있는 것 같습니다. 이 방법을 사용하려고 할 때 PHP에서는 이 방법을 사용하는 것을 권장하지 않는다는 정보가 인터넷에서 많이 보였습니다. 그런데 이 방법을 사용하지 않으면 어떻게 해야 할까요? 그게 5.3 이후의 기능인데, 이제 서버에서는 안정성을 강조하기 때문에 대부분의 사람들이 5.2 버전을 사용하게 됩니다. 코드에서 뛰어다닐까? 결국 아직까지 테스트 서버에서 한 달 넘게 실행했는데, 느낌이 매우 좋고 강력합니다.
두 번째 포인트는- 메모리라는 용어에서는 메모리 해제 문제를 언급해야 합니다. PHP에는 메모리 재활용 메커니즘이 없습니다. C와는 다르지만 메모리를 직접 할당하고 정리해야 하지만 여전히 주의가 필요한 부분이 있습니다. 하지만 주의가 도움이 될 것입니다. 따라서 메모리 사용과 관련하여 저자는 함수의 메모리가 무시되고, 모두 사용되면 기본 프로그램의 메모리가 설정 해제된다는 원칙을 따릅니다. 변수 이름 중복으로 인한 예상치 못한 결과를 방지하세요. (물론 PHP에는 같은 이름의 변수가 있을 수 있으므로 나중에 오는 것이 적용되지만 좋은 습관을 들이는 것이 중요합니다 :))
3. 출력 비활성화
출력 비활성화는 에코 사용을 비활성화한다는 의미입니까? 예, 하지만 완전히 올바른 것은 아닙니다. Linux 세계에는 두 가지 유형의 출력이 있기 때문에 하나는 일반 출력이고 다른 하나는 말할 필요도 없습니다. 정상적인 출력에서는 코드가 아무리 잘 작성되었더라도 즉시 종료됩니다. 다시 한 번 오류 출력이 발생하므로 오류를 억제해야 합니다. 예를 들어, 이 명령을 실행하면 성공과 실패라는 두 가지 결과가 나타납니다. 대부분의 경우 성공하기 쉽습니다. 많은 사람들이 이 기능이 확실히 성공할 것이라고 생각합니다. 따라서 오류가 발생하면 mysql 연결이 실패했다는 메시지를 표시하는 웹 페이지가 많이 표시됩니다. 한 번에 한 사람이 실패하고 다른 사람이 실패하면 성공할 수도 있습니다. 그러나 이러한 오류를 처리하지 않으면 프로그램이 종료됩니다. 프로그램의 오류를 억제하는 방법을 알아야 합니다. 게다가 모든 것을 종합적으로 고려하는 것도 남자의 성숙함입니다 :)
      4 .신호 제어
완전한 백그라운드 프로그램을 어떻게 종료해야 합니까? 'kill -9 pid'와 같은 폭력적인 방법이 있습니까? PHP에는 완벽한 신호 솔루션도 있습니다. 프로그램 지원 시작, 중지, 다시 시작, 상태는 무작위로 선택할 수 있습니다.
5. 작업 로그
백그라운드 프로그램의 경우 출력이 비활성화되면 로그를 작성해야 합니다. 시작부터 무엇을 하는지, 언제 어떤 이유로 종료하는지까지 자세한 기록이 있어야 합니다. 신호를 이해하기 전에 로그에는 시작과 실행만 있습니다. 나중에 프로그램이 언제 종료되었는지 알 수 있습니다. :) 로그를 작성하는 동안 매우 멋진 함수 file_put_contents를 발견했는데 이 경우 추가를 지원합니다. 'tail -f 로그 이름'을 사용하면 실시간으로 실행 상태를 볼 수 있습니다 :)
명령줄 프로그램:
6. 에코도 미쳤습니다
PHP 모범 사례에서도 언급됩니다: echo 있기 때문입니다. 반환 값이 없으므로 인쇄보다 훨씬 빠릅니다. 에코 후 여러 문장을 구분할 수 있으며, 점으로 연결하는 것보다 입력 효율성이 훨씬 빠릅니다. 문자열을 연결하는 데 시간을 낭비하고 싶지 않기 때문에 '.' 없이 이러한 항목을 연결할 수 있었으면 좋겠습니다! PHP에서 그렇게 할 수 있다고 말했기 때문에 ob_start가 가능하다는 사실에 놀랐습니다! ! 예:
ob_start;
echo xxx,xxx,xxxx;
file_put_contents('filename',ob_get_contents);
ob_clean;
효과가 매우 포르노적이고 폭력적입니다. 써본 사람은 알겠지만.
7. 시간대 오류 수정
리눅스 시스템 설치는 아주 간단하지만, 리눅스 시스템을 중국어 버전으로 설치하는 사람들이 많다는 게 아쉽다. 하지만 시간은 뉴욕 시간으로 변경됩니다(서부 8구, 중국은 동부 ​​8구). 따라서 프로그래머로서 프로그램이 제대로 작동하는지 확인하기 위해 모든 것이 정확할 것이라고 기대하지 마십시오. 로그를 쓰거나 시간을 출력할 때 문제가 없습니다. 시간대를 직접 정의하는 것이 가장 좋습니다: date_default_timezone_set('PRC') :)

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

관련 기사

더보기