postfix mta — нужна помощь в обновлении PHP-скрипта с помощью метода или оператора case

Этот скрипт проверяет дату изменения в папке почтового ящика Postfix.

Проблема в том, что у меня есть несколько мест, которые нужно проверить.

скоросшиватель / Шоссе / mail1 / содержит почтовые директории a, b, d, g

скоросшиватель / Шоссе / mail2 / содержит остальное с, е, е, з, …….., х, г

Скрипт запускается просто через URL HTTPS: //URL/index.php [email protected]

Мне нужен скрипт для проверки правильной точки монтирования в зависимости от проверяемого адреса электронной почты. В случае выше это должно проверить /mnt/mail2/d/e/delta.com / …..

Пожалуйста помоги. Я ничего не знаю о php.

<?php

if (isset($_REQUEST["email"])) {
$emailaddress= trim($_REQUEST["email"]);
$emailparts = explode("@",$emailaddress);
if (sizeof($emailparts) != 2) {
print "invalid-email,,,,";
exit();
}
$username = $emailparts[0];
$domain = $emailparts[1];
$basedir = "/mnt/mail1/";
$livePrefix = $basedir;
$archivePrefix = $basedir."archive/";
$livePath = $livePrefix . substr($domain,0,1) . "/" . substr($domain,1,1) . "/" . $domain . "/" . substr($username,0,1) . "/" .  $username;
$archivePath = $archivePrefix . $domain ;
$liveStat = stat( $livePath . "/" . "cur");
$archStat = false;
if ( file_exists( $archivePath ) && is_dir( $archivePrefix ) ) {
$arhiveDirs = scandir($archivePath);
foreach( $arhiveDirs  as $i => $fname ) {
if ( stripos( $fname , $username . "-"  ) !== false ) {
$archivePath = $archivePath . "/" . $fname ;
$archStat = stat( $archivePath . "/cur" );
break;
}
}
}
$status="lost" ;
if ( $liveStat != false ) {
$status = "live" . "," .  date("Y-m-d H:i:s", $liveStat['mtime'] ) . "," . sizeof( scandir($livePath . "/new") ) . "," ;
} else if ($archStat != false ) {
$status = "archived,,,";
} else {
$status = "lost,,,";
}

if ($archStat != false ) {
$status = $status .  date("Y-m-d H:i:s", $archStat['mtime'] ) . "," . sizeof( scandir($archivePath . "/new") )  ;
} else {
$status = $status .  "," ;
}

print $status ;
exit();
} else {
print "error,,,,";
exit();
}?>

0

Решение

Не читая код и не зная много о php: во-первых, вам нужно получить адрес электронной почты по ссылке. Используйте регулярные выражения для этого.
Во-вторых, взорвите электронную почту и получите домен (также с регулярным выражением).

$ domain =

Получите первый и второй символ домена: $ domain [0] и $ domain [1].

Затем вы должны выбрать между двумя папками две проверки. Сделайте это с помощью переключателя, используя 4 основных случая: a, b, d, g и случай по умолчанию, который проверяет остальные.

… кстати: разве в вышеприведенном случае не нужно проверять папку / mnt / mail1 /?

0

Другие решения

В скрипте есть все, что вам нужно:

$domain = $emailparts[1];
$basedir = "/mnt/mail1/";

вам просто нужно изменить $basedir в соответствии со значением в $domainнапример,

switch ($domain[0]) {
case 'a':
case 'b':
case 'd':
case 'g':
// fall through: all the cases above reach this point
$basedir = "/mnt/mail1/";
break;
default:
// all other cases are handled here
$basedir = "/mnt/mail2/";
}

но если серьезно, если вы хотите поддерживать такие скрипты, вы должны изучить основы. Может быть опасно просто копировать / вставлять строки кода от случайных незнакомцев в сети. И особенно на Stackoverflow, который является сайтом вопросов и ответов, люди обычно не хотят просто писать код

0

По вопросам рекламы [email protected]