Pomocy, nawet "GiePeTto" sobie nie radzi.
Jakiś czas temu napisałem skrypt który sprawdza maile (raporty dmarc), jeśli raport zapisany jest w formacie gz, wszystko śmiga jak należy, zbiera mi raporty, zapisuje, przetwarza itd.
Gorzej, że ostatnio zacząłem dostawać raporty w zipach. Zmodyfikowałem kod, żeby wykrywał zip, gz i xml gdyby taki się pojawił.
Niestety nie chce mi nic poza gz zapisywać i nie widzę nigdzie dlaczego.
<?php function getSenderData($senderId) { $host = "localhost"; $username = "moj_user"; $password = "pasior"; $dbname = "moja_baza"; try { $pdo = new PDO("mysql:host=$host;dbname=$dbname", $username, $password); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $pdo->exec("SET NAMES utf8"); $query = "SELECT `email_address`, `email_password` FROM `cxo_senders` WHERE `email_id` = :senderId AND `email_status` = 1 AND `email_type` = 1"; $stmt = $pdo->prepare($query); $stmt->execute(['senderId' => $senderId]); $result = $stmt->fetch(PDO::FETCH_ASSOC); return $result; } catch (PDOException $e) { } } function isFileProcessed($pdo, $fileName) { $query = "SELECT COUNT(*) as count FROM `emails_data` WHERE `file_name` = :fileName"; $stmt = $pdo->prepare($query); $stmt->execute(['fileName' => $fileNameWithoutExtension]); $result = $stmt->fetch(PDO::FETCH_ASSOC); return $result && $result['count'] > 0; } $senderData = getSenderData(1); if (!$senderData) { } $username = $senderData['email_address']; $password = $senderData['email_password']; $hostname = '{imap.gmail.com:993/imap/ssl}'; $inbox = imap_open($hostname . 'INBOX', $username, $password); if (!$inbox) { } // Sprawdzamy ostatnich 7 dni $emails = imap_search($inbox, 'SINCE "' . $date . '"'); if (!$emails) { } $host = "localhost"; $username = "moj_user"; $password = "pasior"; $dbname = "moja_baza"; try { $pdo = new PDO("mysql:host=$host;dbname=$dbname", $username, $password); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); foreach ($emails as $emailNumber) { $structure = imap_fetchstructure($inbox, $emailNumber); $part = $structure->parts[$i]; if ($part->ifdparameters) { foreach ($part->dparameters as $object) { $filename = $object->value; if (!isFileProcessed($pdo, $filename)) { $message = imap_fetchbody($inbox, $emailNumber, $i + 1); if ($part->encoding == 3) { } elseif ($part->encoding == 4) { } $filePath = 'reports/' . $filename; file_put_contents($filePath, $message); } else { } } } } } } } } imap_close($inbox); } catch (PDOException $e) { }
Sprawdzam pliki czy już wcześniej były zapisane, żeby w bazie nie powielać wpisów
w kolejnym kroku analizuję raporty na potrzeby statystyki.
I wszystko działa super ale kurcze tylko z plikami gz .....
Nie słyszałem, żeby były jakieś ograniczenia w tej kwestii.
Pomóżcie.
Pozdrówka