twig/email의 출력을 합법적 인 목적으로 저장해야하는 tmp 파일로 복사하는 스크립트가 있습니다. 먼저 fopen, fwrite, close를 사용하여이 작업을 수행했습니다. 그것은 수년간 일해, 갑자기 멈추어 서서 파일과 작업을 중단했습니다.file_put_contents가 항상 작동하지 않는 경우가 있습니다.
그런 다음 file_put_contents를 사용하도록 변경했습니다. 그러나 같은 상황이 발생합니다. 빠른 대다수의 파일이 생성되지만 15-25 %의 파일은 콘텐츠가있는 동안 로컬에 저장되지 않습니다.
$ bytes는 file_put_contents가 실패 할 때 아무 것도 출력하지 않습니다. 오류 로그에 아무 것도 표시되지 않습니다. 현재 폴더에 324.000 개의 파일이 있으며 최대 10,000 개까지 가져옵니다.
무엇이 잘못 되었나요? 아니면 누군가 다른 디버그 방식을 가르쳐 줄 수 있습니까? 아래 코드를 참조하십시오.
추가 정보, 파일이 저장된 폴더에 올바른 권한이 있습니다. 스크립트는 cronjob에 의해 실행됩니다. 해당 파일이 이미 존재하거나 있는지 확인하여 시작할 수 있습니다 그리고
if (is_writable($serverSettings['root'].'my/tmp/emaillogs/'.$PDFLogFile.'.html')) {
// no worries, just keep trucking
// echo 'The file is writable';
} else {
$body = "Error writing file: ".$serverSettings['root'].'my/tmp/emaillogs/'.$PDFLogFile.'.html'."\n";
$body .= "Date Time: ".date('Y-m-d H:i:s')."\n";
$body .= "--------------------------------------------------------\n";
$body .= "Data to have been written: ".$Contents."\n";
mail('[email protected]', 'FILE WRITING ERROR', $body);
}
$bytes = file_put_contents($serverSettings['root'].'my/tmp/emaillogs/'.$PDFLogFile.'.html', $Contents);
: -
$bytes = file_put_contents($serverSettings['root'].'my/tmp/emaillogs/'.$PDFLogFile.'.html', $Contents);
이 코드를 넣어
try {
$Contents = $twig->render(stripslashes($TemplateDetails['templateHTML']), $EmailData);
$Subject = $twig->render(stripslashes($TemplateDetails['templateSubject']), $EmailData);
$bytes = file_put_contents($serverSettings['root'].'my/tmp/emaillogs/'.$PDFLogFile.'.html', $Contents);
/*
$WriteFile = fopen($serverSettings['root'].'my/tmp/emaillogs/'.$PDFLogFile.'.html','w');
$bytes = fwrite($WriteFile, $Contents);
fclose($WriteFile);
*/
echo $Output->getColoredString('Wrote '.$bytes.' to file '. $serverSettings['root'].'my/tmp/emaillogs/'.$PDFLogFile.'.html')."\n";
// Create the Mailer using your created Transport
$mailer = Swift_Mailer::newInstance($transport);
$logger = new \Swift_Plugins_Loggers_ArrayLogger();
$mailer->registerPlugin(new \Swift_Plugins_LoggerPlugin($logger));
$message = Swift_Message::newInstance($Subject)
->setFrom(array($ResultSelectEmails[$key]['fromEmail'] => $ResultSelectEmails[$key]['fromName']))
->setTo(array($ResultSelectEmails[$key]['toEmail']))
->setBody($Contents, 'text/html', 'UTF-8')
;
if (!$mailer->send($message, $errors)) {
// Dump the log contents
// NOTE: The EchoLogger dumps in realtime so dump() does nothing for it. We use ArrayLogger instead.
echo $Output->getColoredString(" - [ERROR] " . $logger->dump(), "red") . "\n";
}else{
echo $Output->getColoredString('- [SEND] '.date('Y-m-d H:i:s'), 'green') . "\n";
}
}catch (\Exception $exc) {
$body = "TemplateId: ".$ResultSelectEmails[$key]['template']."\n";
$body .= "ShopId: ".$ResultSelectEmails[$key]['shopId']."\n";
$body .= "--------------------------------------------------------\n";
$body .= "String Error: ". $exc->getTraceAsString()."\n";
$body .= "Line: ".$exc->getLine()."\n";
$body .= "File: ".$exc->getFile()."\n";
mail('[email protected]', 'TEMPLATE ERROR: '.$ResultSelectEmails[$key]['template'],$body);
exit;
}
무엇이'$ PDFLogFile'에 있습니까? 또한,'$ bytes == false'를 예외로 던지려고하고이 문제가 어떤 파일로 발생했는지 알기 위해 노력할 것입니다. –
$ PDFLogFile은 전자 메일의 ID와 트랜잭션 해시입니다. 그래서 예를 들어 "1345234-sadfafgasdfasgdsfhggaghf". 항상 존재하며 항상 유일합니다. –
fopen과 함께 flock을 사용했다면 마지막 사용자가 완료되기를 기다리고있었습니다. file_get_contents는 기다리지 않을 것이며, 말하기 만하면됩니다. 죄송합니다. 거기에 다른 사용자가 쓰고 있습니다. 나중에 시도하십시오. 이 경우 나중에 코드를 시도해야합니다. 임시 저장 장치에 데이터를 넣은 다음 예약 된 작업을 사용하여 임시 대기열에서 데이터를 팝핑하십시오. – WEBjuju