<?<span php </span><span /*</span><span * * SVN 外部命令 类 * * @author rubekid * * @todo comment need addslashes for svn commit * </span><span */</span> <span class</span><span SvnUtils { </span><span /*</span><span * * * svn 账号 </span><span */</span> <span const</span> SVN_USERNAME = "robot"<span ; </span><span /*</span><span * * svn 密码 </span><span */</span> <span const</span> SVN_PASSWORD = "robot2013"<span ; </span><span /*</span><span * * 配置文件目录 (任意指定一个临时目录,解决svn: warning: Can't open file '/root/.subversion/servers': Permission denied) </span><span */</span> <span const</span> SVN_CONFIG_DIR = "/var/tmp/"<span ; </span><span /*</span><span * * svn list * * @param $repository string * @return boolean * </span><span */</span> <span public</span> <span static</span> <span function</span> ls(<span $repository</span><span ) { </span><span $command</span> = "sudo svn ls " . <span $repository</span><span ; </span><span $output</span> = self::runCmd ( <span $command</span><span ); </span><span $output</span> = <span implode</span> ( "<br />", <span $output</span><span ); </span><span if</span> (<span strpos</span> ( <span $output</span>, 'non-existent in that revision'<span )) { </span><span return</span> <span false</span><span ; } </span><span return</span> "<br />" . <span $command</span> . "<br />" . <span $output</span><span ; } </span><span /*</span><span * * svn copy * * @param $src string * @param $dst string * @param $comment string * @return boolean * </span><span */</span> <span public</span> <span static</span> <span function</span> <span copy</span>(<span $src</span>, <span $dst</span>, <span $comment</span><span ) { </span><span $command</span> = "sudo svn cp <span $src</span> <span $dst</span> -m '<span $comment</span>'"<span ; </span><span $output</span> = self::runCmd ( <span $command</span><span ); </span><span $output</span> = <span implode</span> ( "<br />", <span $output</span><span ); </span><span if</span> (<span strpos</span> ( <span $output</span>, 'Committed revision'<span )) { </span><span return</span> <span true</span><span ; } </span><span return</span> "<br />" . <span $command</span> . "<br />" . <span $output</span><span ; } </span><span /*</span><span * * svn delete * * @param $url string * @param $comment string * @return boolean * </span><span */</span> <span public</span> <span static</span> <span function</span> delete(<span $url</span>, <span $comment</span><span ) { </span><span $command</span> = "sudo svn del <span $url</span> -m '<span $comment</span>'"<span ; </span><span $output</span> = self::runCmd ( <span $command</span><span ); </span><span $output</span> = <span implode</span> ( '<br />', <span $output</span><span ); </span><span if</span> (<span strpos</span> ( <span $output</span>, 'Committed revision'<span )) { </span><span return</span> <span true</span><span ; } </span><span return</span> "<br />" . <span $command</span> . "<br />" . <span $output</span><span ; } </span><span /*</span><span * * svn move * * @param $src string * @param $dst string * @param $comment string * @return boolean </span><span */</span> <span public</span> <span static</span> <span function</span> move(<span $src</span>, <span $dst</span>, <span $comment</span><span ) { </span><span $command</span> = "sudo svn mv <span $src</span> <span $dst</span> -m '<span $comment</span>'"<span ; </span><span $output</span> = self::runCmd ( <span $command</span><span ); </span><span $output</span> = <span implode</span> ( '<br />', <span $output</span><span ); </span><span if</span> (<span strpos</span> ( <span $output</span>, 'Committed revision'<span )) { </span><span return</span> <span true</span><span ; } </span><span return</span> "<br />" . <span $command</span> . "<br />" . <span $output</span><span ; } </span><span /*</span><span * * svn mkdir * * @param $url string * @param $comment string * @return boolean </span><span */</span> <span public</span> <span static</span> <span function</span> <span mkdir</span>(<span $url</span>, <span $comment</span><span ) { </span><span $command</span> = "sudo svn mkdir <span $url</span> -m '<span $comment</span>'"<span ; </span><span $output</span> = self::runCmd ( <span $command</span><span ); </span><span $output</span> = <span implode</span> ( '<br />', <span $output</span><span ); </span><span if</span> (<span strpos</span> ( <span $output</span>, 'Committed revision'<span )) { </span><span return</span> <span true</span><span ; } </span><span return</span> "<br />" . <span $command</span> . "<br />" . <span $output</span><span ; } </span><span /*</span><span * * svn diff * @param $pathA string * @param $pathB string * @return string </span><span */</span> <span public</span> <span static</span> <span function</span> diff(<span $pathA</span>, <span $pathB</span><span ) { </span><span $output</span> = self::runCmd ( "sudo svn diff <span $pathA</span> <span $pathB</span>"<span ); </span><span return</span> <span implode</span> ( '<br />', <span $output</span><span ); } </span><span /*</span><span * * svn checkout * @param $url string * @param $dir string * @return boolean </span><span */</span> <span public</span> <span static</span> <span function</span> checkout(<span $url</span>, <span $dir</span><span ) { </span><span $command</span> = "cd <span $dir</span> && sudo svn co <span $url</span>"<span ; </span><span $output</span> = self::runCmd ( <span $command</span><span ); </span><span $output</span> = <span implode</span> ( '<br />', <span $output</span><span ); </span><span if</span> (<span strstr</span> ( <span $output</span>, 'Checked out revision'<span )) { </span><span return</span> <span true</span><span ; } </span><span return</span> "<br />" . <span $command</span> . "<br />" . <span $output</span><span ; } </span><span /*</span><span * * svn update * @param $path string </span><span */</span> <span public</span> <span static</span> <span function</span> update(<span $path</span><span ) { </span><span $command</span> = "cd <span $path</span> && sudo svn up"<span ; </span><span $output</span> = self::runCmd ( <span $command</span><span ); </span><span $output</span> = <span implode</span> ( '<br />', <span $output</span><span ); </span><span preg_match_all</span> ( "/[0-9]+/", <span $output</span>, <span $ret</span><span ); </span><span if</span> (! <span $ret</span> [0] [0<span ]) { </span><span return</span> "<br />" . <span $command</span> . "<br />" . <span $output</span><span ; } </span><span return</span> <span $ret</span> [0] [0<span ]; } </span><span /*</span><span * * svn merge * * @param $revision string * @param $url string * @param $dir string * * @return boolean </span><span */</span> <span public</span> <span static</span> <span function</span> merge(<span $revision</span>, <span $url</span>, <span $dir</span><span ) { </span><span $command</span> = "cd <span $dir</span> && sudo svn merge -r1:<span $revision</span> <span $url</span>"<span ; </span><span $output</span> = <span implode</span> ( '<br />', self::runCmd ( <span $command</span><span ) ); </span><span if</span> (<span strstr</span> ( <span $output</span>, 'Text conflicts'<span )) { </span><span return</span> 'Command: ' . <span $command</span> . '<br />' . <span $output</span><span ; } </span><span return</span> <span true</span><span ; } </span><span /*</span><span * * svn commit * * @param $dir string * @param $comment string * * @return boolean </span><span */</span> <span public</span> <span static</span> <span function</span> commit(<span $dir</span>, <span $comment</span><span ) { </span><span $command</span> = "cd <span $dir</span> && sudo svn commit -m'<span $comment</span>'"<span ; </span><span $output</span> = <span implode</span> ( '<br />', self::runCmd ( <span $command</span><span ) ); </span><span if</span> (<span strpos</span> ( <span $output</span>, 'Committed revision' ) || <span empty</span> ( <span $output</span><span )) { </span><span return</span> <span true</span><span ; } </span><span return</span> <span $output</span><span ; } </span><span /*</span><span * * svn status (输出WC中文件和目录的状态) * * @param $dir string </span><span */</span> <span public</span> <span static</span> <span function</span> getStatus(<span $dir</span><span ) { </span><span $command</span> = "cd <span $dir</span> && sudo svn st"<span ; </span><span return</span> self::runCmd ( <span $command</span><span ); } </span><span /*</span><span * * svn 冲突 * * @param $dir string * @return boolean </span><span */</span> <span public</span> <span static</span> <span function</span> hasConflict(<span $dir</span><span ) { </span><span $output</span> = self::getStatus ( <span $dir</span><span ); </span><span foreach</span> ( <span $output</span> <span as</span> <span $line</span><span ) { </span><span if</span> ( <span substr</span> ( <span trim</span> ( <span $line</span> ), 0, 1 ) == 'C' || (<span substr</span> ( <span trim</span> ( <span $line</span> ), 0, 1 ) == '!'<span )) { </span><span return</span> <span true</span><span ; } } </span><span return</span> <span false</span><span ; } </span><span /*</span><span * * svn log * * @param $path string * @return string * </span><span */</span> <span public</span> <span static</span> <span function</span> getLog(<span $path</span><span ) { </span><span $command</span> = "sudo svn log <span $path</span> --xml"<span ; </span><span $output</span> = self::runCmd ( <span $command</span><span ); </span><span return</span> <span implode</span> ( '', <span $output</span><span ); } </span><span /*</span><span * * svn info * @param $path string </span><span */</span> <span public</span> <span static</span> <span function</span> getPathRevision(<span $path</span><span ) { </span><span $command</span> = "sudo svn info <span $path</span> --xml"<span ; </span><span $output</span> = self::runCmd ( <span $command</span><span ); </span><span $string</span> = <span implode</span> ( '', <span $output</span><span ); </span><span $xml</span> = <span new</span> SimpleXMLElement ( <span $string</span><span ); </span><span foreach</span> ( <span $xml</span>->entry [0]->attributes () <span as</span> <span $key</span> => <span $value</span><span ) { </span><span if</span> ( <span $key</span> == 'revision'<span ) { </span><span return</span> <span $value</span><span ; } } } </span><span /*</span><span * * 获取最新版本号 * @param $path string </span><span */</span> <span public</span> <span static</span> <span function</span> getHeadRevision(<span $path</span><span ) { </span><span $command</span> = "cd <span $path</span> && sudo svn up"<span ; </span><span $output</span> = self::runCmd ( <span $command</span><span ); </span><span $output</span> = <span implode</span> ( '<br />', <span $output</span><span ); </span><span preg_match_all</span> ( "/[0-9]+/", <span $output</span>, <span $ret</span><span ); </span><span if</span> (! <span $ret</span> [0] [0<span ]) { </span><span return</span> "<br />" . <span $command</span> . "<br />" . <span $output</span><span ; } </span><span return</span> <span $ret</span> [0] [0<span ]; } </span><span /*</span><span * * 获取某文件最早版本号 * * @param $filePath string * </span><span */</span> <span public</span> <span static</span> <span function</span> getFileFirstVersion(<span $filePath</span><span ){ </span><span $command</span> = "sudo svn log {<span $filePath</span>}"<span ; </span><span $output</span> = self::runCmd ( <span $command</span> , "|grep -i ^r[0-9]* |awk '{print $1}'"<span ); </span><span if</span>(<span empty</span>(<span $output</span><span )){ </span><span return</span> <span false</span><span ; } </span><span return</span> <span str_replace</span>("r", '', <span $output</span>[<span count</span>(<span $output</span>)-1<span ]); } </span><span /*</span><span * * 获取两个版本间修改的文件信息列表 * * @param $fromVersion int * @param $headRevision int * @param $$path string * * @return array </span><span */</span> <span public</span> <span static</span> <span function</span> getChangedFiles(<span $path</span>, <span $fromVersion</span>, <span $headRevision</span><span ){ </span><span $files</span> = <span array</span><span (); </span><span $pipe</span> = "|grep -i ^Index:|awk -F : '{print $2}'"<span ; </span><span $command</span> = "svn diff -r {<span $fromVersion</span>}:{<span $headRevision</span>} <span $path</span>"<span ; </span><span $output</span> = self::runCmd ( <span $command</span> ,<span $pipe</span><span ); </span><span $files</span> = <span array_merge</span>(<span $files</span>, <span $output</span><span ); </span><span $command</span> = "svn diff -r {<span $headRevision</span>}:{<span $fromVersion</span>} <span $path</span>"; <span //</span><span 文件删除可用逆向对比</span> <span $output</span> = self::runCmd ( <span $command</span> ,<span $pipe</span><span ); </span><span $files</span> = <span array_merge</span>(<span $files</span>, <span $output</span><span ); </span><span return</span> <span array_unique</span>(<span $files</span><span ); } </span><span /*</span><span * * 获取两个版本间某文件修改 的内容 * * @param $filePath string * @param $fromVersion int * @param $headRevision int * * @return array </span><span */</span> <span public</span> <span static</span> <span function</span> getChangedInfo( <span $filePath</span>, <span $fromVersion</span>, <span $headRevision</span><span ){ </span><span $command</span> = "sudo svn diff -r {<span $fromVersion</span>}:{<span $headRevision</span>} <span $filePath</span>"<span ; </span><span $output</span> = self::runCmd ( <span $command</span><span ); </span><span return</span> <span $output</span><span ; } </span><span /*</span><span * * 查看文件内容 * * @param $filePath string * @param $version int * * @return array </span><span */</span> <span public</span> <span static</span> <span function</span> getFileContent(<span $filePath</span>, <span $version</span><span ){ </span><span $command</span> = "sudo svn cat -r {<span $version</span>} <span $filePath</span>"<span ; </span><span $output</span> = self::runCmd ( <span $command</span><span ); </span><span return</span> <span $output</span><span ; } </span><span /*</span><span * * Run a cmd and return result * @param $command string * @param $pipe string (可以增加管道对返回数据进行预筛选) * @return array </span><span */</span> <span protected</span> <span static</span> <span function</span> runCmd(<span $command</span> , <span $pipe</span> =""<span ) { </span><span $authCommand</span> = ' --username ' . self::SVN_USERNAME . ' --password ' . self::SVN_PASSWORD . ' --no-auth-cache --non-interactive --config-dir ' . self::SVN_CONFIG_DIR . '.subversion'<span ; </span><span exec</span> ( <span $command</span> . <span $authCommand</span> . " 2>&1" . <span $pipe</span>, <span $output</span><span ); </span><span return</span> <span $output</span><span ; } }</span>

여전히 인기있는 것은 사용 편의성, 유연성 및 강력한 생태계입니다. 1) 사용 편의성과 간단한 구문은 초보자에게 첫 번째 선택입니다. 2) 웹 개발, HTTP 요청 및 데이터베이스와의 우수한 상호 작용과 밀접하게 통합되었습니다. 3) 거대한 생태계는 풍부한 도구와 라이브러리를 제공합니다. 4) 활성 커뮤니티와 오픈 소스 자연은 새로운 요구와 기술 동향에 맞게 조정됩니다.

PHP와 Python은 웹 개발, 데이터 처리 및 자동화 작업에 널리 사용되는 고급 프로그래밍 언어입니다. 1.PHP는 종종 동적 웹 사이트 및 컨텐츠 관리 시스템을 구축하는 데 사용되며 Python은 종종 웹 프레임 워크 및 데이터 과학을 구축하는 데 사용됩니다. 2.PHP는 Echo를 사용하여 콘텐츠를 출력하고 Python은 인쇄를 사용합니다. 3. 객체 지향 프로그래밍을 지원하지만 구문과 키워드는 다릅니다. 4. PHP는 약한 유형 변환을 지원하는 반면, 파이썬은 더 엄격합니다. 5. PHP 성능 최적화에는 Opcache 및 비동기 프로그래밍 사용이 포함되며 Python은 Cprofile 및 비동기 프로그래밍을 사용합니다.

PHP는 주로 절차 적 프로그래밍이지만 객체 지향 프로그래밍 (OOP)도 지원합니다. Python은 OOP, 기능 및 절차 프로그래밍을 포함한 다양한 패러다임을 지원합니다. PHP는 웹 개발에 적합하며 Python은 데이터 분석 및 기계 학습과 같은 다양한 응용 프로그램에 적합합니다.

PHP는 1994 년에 시작되었으며 Rasmuslerdorf에 의해 개발되었습니다. 원래 웹 사이트 방문자를 추적하는 데 사용되었으며 점차 서버 측 스크립팅 언어로 진화했으며 웹 개발에 널리 사용되었습니다. Python은 1980 년대 후반 Guidovan Rossum에 의해 개발되었으며 1991 년에 처음 출시되었습니다. 코드 가독성과 단순성을 강조하며 과학 컴퓨팅, 데이터 분석 및 기타 분야에 적합합니다.

PHP는 웹 개발 및 빠른 프로토 타이핑에 적합하며 Python은 데이터 과학 및 기계 학습에 적합합니다. 1.PHP는 간단한 구문과 함께 동적 웹 개발에 사용되며 빠른 개발에 적합합니다. 2. Python은 간결한 구문을 가지고 있으며 여러 분야에 적합하며 강력한 라이브러리 생태계가 있습니다.

PHP는 현대화 프로세스에서 많은 웹 사이트 및 응용 프로그램을 지원하고 프레임 워크를 통해 개발 요구에 적응하기 때문에 여전히 중요합니다. 1.PHP7은 성능을 향상시키고 새로운 기능을 소개합니다. 2. Laravel, Symfony 및 Codeigniter와 같은 현대 프레임 워크는 개발을 단순화하고 코드 품질을 향상시킵니다. 3. 성능 최적화 및 모범 사례는 응용 프로그램 효율성을 더욱 향상시킵니다.

phphassignificallyimpactedwebdevelopmentandextendsbeyondit

PHP 유형은 코드 품질과 가독성을 향상시키기위한 프롬프트입니다. 1) 스칼라 유형 팁 : PHP7.0이므로 int, float 등과 같은 기능 매개 변수에 기본 데이터 유형을 지정할 수 있습니다. 2) 반환 유형 프롬프트 : 기능 반환 값 유형의 일관성을 확인하십시오. 3) Union 유형 프롬프트 : PHP8.0이므로 기능 매개 변수 또는 반환 값에 여러 유형을 지정할 수 있습니다. 4) Nullable 유형 프롬프트 : NULL 값을 포함하고 널 값을 반환 할 수있는 기능을 포함 할 수 있습니다.


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

MinGW - Windows용 미니멀리스트 GNU
이 프로젝트는 osdn.net/projects/mingw로 마이그레이션되는 중입니다. 계속해서 그곳에서 우리를 팔로우할 수 있습니다. MinGW: GCC(GNU Compiler Collection)의 기본 Windows 포트로, 기본 Windows 애플리케이션을 구축하기 위한 무료 배포 가능 가져오기 라이브러리 및 헤더 파일로 C99 기능을 지원하는 MSVC 런타임에 대한 확장이 포함되어 있습니다. 모든 MinGW 소프트웨어는 64비트 Windows 플랫폼에서 실행될 수 있습니다.

드림위버 CS6
시각적 웹 개발 도구

mPDF
mPDF는 UTF-8로 인코딩된 HTML에서 PDF 파일을 생성할 수 있는 PHP 라이브러리입니다. 원저자인 Ian Back은 자신의 웹 사이트에서 "즉시" PDF 파일을 출력하고 다양한 언어를 처리하기 위해 mPDF를 작성했습니다. HTML2FPDF와 같은 원본 스크립트보다 유니코드 글꼴을 사용할 때 속도가 느리고 더 큰 파일을 생성하지만 CSS 스타일 등을 지원하고 많은 개선 사항이 있습니다. RTL(아랍어, 히브리어), CJK(중국어, 일본어, 한국어)를 포함한 거의 모든 언어를 지원합니다. 중첩된 블록 수준 요소(예: P, DIV)를 지원합니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경
