多个 preg_match - 渲染速度慢,如何使速度更快?
Multiple preg_match - slow render, how to make faster?
我有一个功能可以识别 youtube-dl 程序日志文件中的错误类型。
为了检查我需要使用多重 preg_match 的错误类型。
问题是我认为这不是最好的方法,而且我认为呈现这段代码太慢了。
谁有其他方法或示例可以快速呈现代码?
private function getError(){
$message = $this->log_output;
$output = null;
if (preg_match('/ERROR(.*)please sign in to view this video|video is protected by a password/i', $message)) {
$output= Translate::doInternal('Video protetto da password');
}elseif (preg_match('/ERROR(.*)Playback on other websites has been disabled/', $message)){
$output= Translate::doInternal('Video non scaricabile, è stata imposta la visualizzazione solo sul sito di youtube');
}elseif (preg_match('/ERROR(.*)copyright infringement/i', $message)||preg_match('/copyright claim/i', $message)||preg_match('/copyright grounds/i', $message)) {
$output= Translate::doInternal('Video rimosso per motivi di copyright');
}elseif (preg_match('/ERROR(.*)this video does not exist/i', $message)) {
$output= Translate::doInternal('Video inesistente');
}elseif (preg_match('/ERROR(.*)account associated with this video has been terminated/', $message)) {
$output= Translate::doInternal('Video con account chiuso');
}elseif (preg_match('/ERROR(.*)This video is unavailable/i', $message)) {
$output= Translate::doInternal('Video Privato o non disponibile');
}elseif (preg_match('/ERROR(.*)This video contains content from/', $message)) {
$output= Translate::doInternal('Video non disponibile per motivi di copyright');
}elseif (preg_match('/ERROR(.*)This video has been removed by the user/i', $message)) {
$output= Translate::doInternal('Video rimosso dall\'utente youtube');
}elseif (preg_match('/ERROR(.*)This video is unavailable/i', $message)) {
$output= Translate::doInternal('Video Privato o non disponibile');
}elseif (preg_match('/ERROR(.*)This video is not available/i', $message)){
$output= Translate::doInternal('Questo video non è disponibile');
}elseif (preg_match('/ERROR(.*)The uploader has not made this video available in your country/i', $message)){
$output= Translate::doInternal('Video non disponibile, è stato imposto blocco di paese');
}elseif (preg_match('/ERROR(.*)Video geo-restricted by the owner/', $message)){
$output= Translate::doInternal('Video geo-limitato dal proprietario');
}elseif (preg_match('/ERROR(.*)Unsupported URL: /i', $message)){
$output= Translate::doInternal('Player non rilevato oppure questo sito non è riconosciuto');
}elseif (preg_match('/ERROR(.*)This video is only available for registered users. /i', $message)){
$output= Translate::doInternal('Questo video non è scaricabile perchè è un profilo privato');
}elseif (preg_match('/ERROR(.*)Access denied to video /', $message)){
$output= Translate::doInternal('Questo video non è scaricabile perchè è un profilo privato');
}elseif (preg_match('/ERROR(.*)caused by URLError/', $message)){
$output= Translate::doInternal('Questo URL non è valido, controlla e riprova');
}elseif (preg_match('/ERROR(.*); please report this issue on/i', $message)){
$output= Translate::doInternal('Errore di estrazione video');
}elseif (preg_match('/ERROR(.*)HTTP Error 403/', $message)){
$output= Translate::doInternal('Errore temporaneo su youtube, RIPROVA');
}elseif (preg_match('/ERROR(.*)No login info available, needed for using youtube/', $message)){
$output= Translate::doInternal('Questo/i video richiedono l\'accesso a youtube, impossibile da scaricare');
}elseif (preg_match('/ERROR(.*)Content Warning/', $message)){
$output= Translate::doInternal('Questo video richiede l\'accesso a youtube per contenuti espliciti, verrà trovata una soluzione prima possibile.');
}elseif (preg_match('/ERROR(.*)This live stream recording is not available/', $message)){
$output= Translate::doInternal('La live registrata per questo video non è disponibile.');
}elseif (preg_match('/ERROR(.*)Upgrade now to enjoy this video Start Your Free Week Already a Premium member\? Log in or Sign up/', $message)){
$output= Translate::doInternal('Questo video richiede l\'accesso all\'account premium, non posso scaricarlo.');
}elseif (preg_match('/ERROR(.*)The uploader has not made this video available/', $message)){
$output= Translate::doInternal('L\'autore del caricamento non ha reso disponibile questo video');
}elseif (preg_match('/ERROR(.*)who has blocked it from display on this website or application/', $message)){
$output= Translate::doInternal('L\'autore del caricamento non ha reso disponibile questo video per il download');
}elseif (preg_match('/ERROR(.*)unable to download video data/', $message)){
$output= Translate::doInternal('Errore temporaneo, RIPROVA');
}elseif (preg_match('/ERROR(.*)This video is no longer available because the uploader has closed their YouTube account/', $message)){
$output= Translate::doInternal('Questo video non è più disponibile perché l\'autore del caricamento ha chiuso il suo account YouTube');
}elseif (preg_match('/ERROR(.*)This video has been removed for violating YouTube\'s Terms of Service/', $message)){
$output= Translate::doInternal('Questo video è stato rimosso per violazione dei Termini di servizio di YouTube');
}elseif (preg_match('/ERROR(.*)This video is only available to Music Premium members/', $message)){
$output= Translate::doInternal('Questo video disponibile solo per i membri di Music Premium');
}elseif (preg_match('/ERROR(.*)This video requires payment to watch/', $message)){
$output= Translate::doInternal('Questo video non è scaricabile perchè richiede un abbonamento a Youtube');
}elseif (preg_match('/ERROR(.*)Filtering and streamcopy cannot be used together/', $message)){
//Logger::setLog($this->id,'errore di aumento volume !');
$output= Translate::doInternal('Errore durante l\'aumento volume, lo sviluppatore è già al corrente di questo tipo di errore, verrà sistemato al più presto.');
}elseif (preg_match('/ERROR(.*)audio conversion failed/', $message)){
//Logger::setLog($this->id,'Errore di conversione audio, codec non riconosciuto.');
$output= Translate::doInternal('Errore di conversione audio, codec non riconosciuto, questo errore è già stato segnalato al coder dell\'applicazione');
}elseif (preg_match('/ERROR(.*)giving up after 10 retries/', $message)){
// Logger::setLog($this->id,'giving up after 10 retries');
$output= Translate::doInternal('Qualcosa su youtube non funziona in questo video. non riesco a scaricarlo neanche dopo 10 tentativi, riprova più tardi');
}
elseif (preg_match('/ExtractorError(.*)/', $message, $output)){
Logger::setLog($this->id, $output[1]);
$output= Translate::doInternal('Errore generico , riprova');
}elseif (preg_match('/ERROR: (.*)/', $message, $output)) {
Logger::setLog($this->id, $output[1]);
$output= Translate::doInternal('Errore generico , riprova');
}elseif (preg_match('/EOFError: (.*)/', $message, $output)) {
Logger::setLog($this->id, $output[1]);
$output= Translate::doInternal('Errore su proxy generico , riprova');
}elseif (preg_match('/TypeError:(.*)/', $message, $output)){
Logger::setLog($this->id, $output[1]);
$output= Translate::doInternal('Errore generico , riprova');
}elseif (preg_match('/ValueError:(.*)/', $message, $output)){
Logger::setLog($this->id, $output[1]);
$output= Translate::doInternal('Errore generico , riprova');
}elseif (preg_match('/\[download\](.*)does not pass filter (.*), skipping ../', $message)){
$output= Translate::doInternal('Video non scaricabile, questo video è una live oppure supera la durata consentita di 3 ore');
}
return $output;
}
使用一个匹配所有错误消息的正则表达式,并将您想要条件化的部分放入捕获组。然后你可以使用关联数组将这些映射到翻译。
$messages = [
"please sign in to view this video" => 'Video protetto da password',
"video is protected by a password" => 'Video protetto da password',
"playback on other websites has been disabled" => 'Video non scaricabile, è stata imposta la visualizzazione solo sul sito di youtube',
...
];
$regexp = '/ERROR:.*(' . implode('|', array_map('preg_quote', array_keys($messages))) . ')/i';
if (preg_match($regexp, $message, $matches) {
$output = Translate::doInternal($messages[strtolower($matches[1])]);
}
我有一个功能可以识别 youtube-dl 程序日志文件中的错误类型。 为了检查我需要使用多重 preg_match 的错误类型。 问题是我认为这不是最好的方法,而且我认为呈现这段代码太慢了。 谁有其他方法或示例可以快速呈现代码?
private function getError(){
$message = $this->log_output;
$output = null;
if (preg_match('/ERROR(.*)please sign in to view this video|video is protected by a password/i', $message)) {
$output= Translate::doInternal('Video protetto da password');
}elseif (preg_match('/ERROR(.*)Playback on other websites has been disabled/', $message)){
$output= Translate::doInternal('Video non scaricabile, è stata imposta la visualizzazione solo sul sito di youtube');
}elseif (preg_match('/ERROR(.*)copyright infringement/i', $message)||preg_match('/copyright claim/i', $message)||preg_match('/copyright grounds/i', $message)) {
$output= Translate::doInternal('Video rimosso per motivi di copyright');
}elseif (preg_match('/ERROR(.*)this video does not exist/i', $message)) {
$output= Translate::doInternal('Video inesistente');
}elseif (preg_match('/ERROR(.*)account associated with this video has been terminated/', $message)) {
$output= Translate::doInternal('Video con account chiuso');
}elseif (preg_match('/ERROR(.*)This video is unavailable/i', $message)) {
$output= Translate::doInternal('Video Privato o non disponibile');
}elseif (preg_match('/ERROR(.*)This video contains content from/', $message)) {
$output= Translate::doInternal('Video non disponibile per motivi di copyright');
}elseif (preg_match('/ERROR(.*)This video has been removed by the user/i', $message)) {
$output= Translate::doInternal('Video rimosso dall\'utente youtube');
}elseif (preg_match('/ERROR(.*)This video is unavailable/i', $message)) {
$output= Translate::doInternal('Video Privato o non disponibile');
}elseif (preg_match('/ERROR(.*)This video is not available/i', $message)){
$output= Translate::doInternal('Questo video non è disponibile');
}elseif (preg_match('/ERROR(.*)The uploader has not made this video available in your country/i', $message)){
$output= Translate::doInternal('Video non disponibile, è stato imposto blocco di paese');
}elseif (preg_match('/ERROR(.*)Video geo-restricted by the owner/', $message)){
$output= Translate::doInternal('Video geo-limitato dal proprietario');
}elseif (preg_match('/ERROR(.*)Unsupported URL: /i', $message)){
$output= Translate::doInternal('Player non rilevato oppure questo sito non è riconosciuto');
}elseif (preg_match('/ERROR(.*)This video is only available for registered users. /i', $message)){
$output= Translate::doInternal('Questo video non è scaricabile perchè è un profilo privato');
}elseif (preg_match('/ERROR(.*)Access denied to video /', $message)){
$output= Translate::doInternal('Questo video non è scaricabile perchè è un profilo privato');
}elseif (preg_match('/ERROR(.*)caused by URLError/', $message)){
$output= Translate::doInternal('Questo URL non è valido, controlla e riprova');
}elseif (preg_match('/ERROR(.*); please report this issue on/i', $message)){
$output= Translate::doInternal('Errore di estrazione video');
}elseif (preg_match('/ERROR(.*)HTTP Error 403/', $message)){
$output= Translate::doInternal('Errore temporaneo su youtube, RIPROVA');
}elseif (preg_match('/ERROR(.*)No login info available, needed for using youtube/', $message)){
$output= Translate::doInternal('Questo/i video richiedono l\'accesso a youtube, impossibile da scaricare');
}elseif (preg_match('/ERROR(.*)Content Warning/', $message)){
$output= Translate::doInternal('Questo video richiede l\'accesso a youtube per contenuti espliciti, verrà trovata una soluzione prima possibile.');
}elseif (preg_match('/ERROR(.*)This live stream recording is not available/', $message)){
$output= Translate::doInternal('La live registrata per questo video non è disponibile.');
}elseif (preg_match('/ERROR(.*)Upgrade now to enjoy this video Start Your Free Week Already a Premium member\? Log in or Sign up/', $message)){
$output= Translate::doInternal('Questo video richiede l\'accesso all\'account premium, non posso scaricarlo.');
}elseif (preg_match('/ERROR(.*)The uploader has not made this video available/', $message)){
$output= Translate::doInternal('L\'autore del caricamento non ha reso disponibile questo video');
}elseif (preg_match('/ERROR(.*)who has blocked it from display on this website or application/', $message)){
$output= Translate::doInternal('L\'autore del caricamento non ha reso disponibile questo video per il download');
}elseif (preg_match('/ERROR(.*)unable to download video data/', $message)){
$output= Translate::doInternal('Errore temporaneo, RIPROVA');
}elseif (preg_match('/ERROR(.*)This video is no longer available because the uploader has closed their YouTube account/', $message)){
$output= Translate::doInternal('Questo video non è più disponibile perché l\'autore del caricamento ha chiuso il suo account YouTube');
}elseif (preg_match('/ERROR(.*)This video has been removed for violating YouTube\'s Terms of Service/', $message)){
$output= Translate::doInternal('Questo video è stato rimosso per violazione dei Termini di servizio di YouTube');
}elseif (preg_match('/ERROR(.*)This video is only available to Music Premium members/', $message)){
$output= Translate::doInternal('Questo video disponibile solo per i membri di Music Premium');
}elseif (preg_match('/ERROR(.*)This video requires payment to watch/', $message)){
$output= Translate::doInternal('Questo video non è scaricabile perchè richiede un abbonamento a Youtube');
}elseif (preg_match('/ERROR(.*)Filtering and streamcopy cannot be used together/', $message)){
//Logger::setLog($this->id,'errore di aumento volume !');
$output= Translate::doInternal('Errore durante l\'aumento volume, lo sviluppatore è già al corrente di questo tipo di errore, verrà sistemato al più presto.');
}elseif (preg_match('/ERROR(.*)audio conversion failed/', $message)){
//Logger::setLog($this->id,'Errore di conversione audio, codec non riconosciuto.');
$output= Translate::doInternal('Errore di conversione audio, codec non riconosciuto, questo errore è già stato segnalato al coder dell\'applicazione');
}elseif (preg_match('/ERROR(.*)giving up after 10 retries/', $message)){
// Logger::setLog($this->id,'giving up after 10 retries');
$output= Translate::doInternal('Qualcosa su youtube non funziona in questo video. non riesco a scaricarlo neanche dopo 10 tentativi, riprova più tardi');
}
elseif (preg_match('/ExtractorError(.*)/', $message, $output)){
Logger::setLog($this->id, $output[1]);
$output= Translate::doInternal('Errore generico , riprova');
}elseif (preg_match('/ERROR: (.*)/', $message, $output)) {
Logger::setLog($this->id, $output[1]);
$output= Translate::doInternal('Errore generico , riprova');
}elseif (preg_match('/EOFError: (.*)/', $message, $output)) {
Logger::setLog($this->id, $output[1]);
$output= Translate::doInternal('Errore su proxy generico , riprova');
}elseif (preg_match('/TypeError:(.*)/', $message, $output)){
Logger::setLog($this->id, $output[1]);
$output= Translate::doInternal('Errore generico , riprova');
}elseif (preg_match('/ValueError:(.*)/', $message, $output)){
Logger::setLog($this->id, $output[1]);
$output= Translate::doInternal('Errore generico , riprova');
}elseif (preg_match('/\[download\](.*)does not pass filter (.*), skipping ../', $message)){
$output= Translate::doInternal('Video non scaricabile, questo video è una live oppure supera la durata consentita di 3 ore');
}
return $output;
}
使用一个匹配所有错误消息的正则表达式,并将您想要条件化的部分放入捕获组。然后你可以使用关联数组将这些映射到翻译。
$messages = [
"please sign in to view this video" => 'Video protetto da password',
"video is protected by a password" => 'Video protetto da password',
"playback on other websites has been disabled" => 'Video non scaricabile, è stata imposta la visualizzazione solo sul sito di youtube',
...
];
$regexp = '/ERROR:.*(' . implode('|', array_map('preg_quote', array_keys($messages))) . ')/i';
if (preg_match($regexp, $message, $matches) {
$output = Translate::doInternal($messages[strtolower($matches[1])]);
}