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

0

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

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

Папка /mnt/mail1/ содержит почту dirs a, b, d, g

Папка /mnt/mail2/ содержит остальные c, e, f, h,........, x, z

Скрипт запускается просто через 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();
}


?>
  • 1
    И вы считаете, что мы готовы тратить наше время на реализацию того, что вы хотите? Возьмите книгу, изучите PHP, и если у вас возникли особые проблемы, мы здесь, чтобы помочь вам.
  • 0
    Код отформатирован.
Теги:
postfix-mta

2 ответа

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, который является сайтом Q и A, люди обычно не хотят просто писать код

0

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

$ domain =

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

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

... кстати: не следует ли в этом случае проверить папку /mnt/mail1/?

  • 0
    Я проверяю папку mail1, но мне нужно проверить и другую. Ваш ответ звучит так, как будто это сработает, но помните ..... Я и PHP не друзья. Возможно ли, что вы можете обновить этот код для меня, пожалуйста
  • 0
    Извините, но я тоже не очень разбираюсь в PHP.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню