찾다
백엔드 개발PHP 튜토리얼PHP编写的SVN类_PHP教程

<?<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>

 

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/440398.htmlTechArticle? SVN_USERNAME = "robot" SVN_PASSWORD = "robot2013" SVN_CONFIG_DIR = "/var/tmp/" ls( = "sudo svn ls " . = self::runCmd ( = ( "br /", ( ( , 'non-existent in that revision' "br /" ....
성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
PHP의 지속적인 사용 : 지구력의 이유PHP의 지속적인 사용 : 지구력의 이유Apr 19, 2025 am 12:23 AM

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

PHP 및 Python : 유사점과 차이점을 탐구합니다PHP 및 Python : 유사점과 차이점을 탐구합니다Apr 19, 2025 am 12:21 AM

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

PHP와 Python : 다른 패러다임이 설명되었습니다PHP와 Python : 다른 패러다임이 설명되었습니다Apr 18, 2025 am 12:26 AM

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

PHP와 Python : 그들의 역사에 깊은 다이빙PHP와 Python : 그들의 역사에 깊은 다이빙Apr 18, 2025 am 12:25 AM

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

PHP와 Python 중에서 선택 : 가이드PHP와 Python 중에서 선택 : 가이드Apr 18, 2025 am 12:24 AM

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

PHP 및 프레임 워크 : 언어 현대화PHP 및 프레임 워크 : 언어 현대화Apr 18, 2025 am 12:14 AM

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

PHP의 영향 : 웹 개발 및 그 이상PHP의 영향 : 웹 개발 및 그 이상Apr 18, 2025 am 12:10 AM

phphassignificallyimpactedwebdevelopmentandextendsbeyondit

스칼라 유형, 반환 유형, 노조 유형 및 무효 유형을 포함한 PHP 유형의 힌트 작업은 어떻게 작동합니까?스칼라 유형, 반환 유형, 노조 유형 및 무효 유형을 포함한 PHP 유형의 힌트 작업은 어떻게 작동합니까?Apr 17, 2025 am 12:25 AM

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

See all articles

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

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

뜨거운 도구

SublimeText3 중국어 버전

SublimeText3 중국어 버전

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

MinGW - Windows용 미니멀리스트 GNU

MinGW - Windows용 미니멀리스트 GNU

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

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

mPDF

mPDF

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

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경