mmm, una soluzione probabilmente migliore sarebbe quella di mettere come suffisso, invece che il numero della e-mail l'orario in forma di unixtimestamp cosi da averle comunque ordinate progressivamente ma snellendo considerevolmente il codice
codice:
define('_EMAIL_PATH_','email_');
define('_EMAIL_PREFIX_','email_');
define('_EMAIL_SUFFIX_','.eml');
//Write Email
$f = fopen(_EMAIL_PATH_ . '/' . _EMAIL_PREFIX_ . time() . _EMAIL_SUFFIX_, "w+");
fwrite($f, file_get_contents("php://stdin"));
fclose($f);
ma oltre a questo, un'altra cosa importante è evitare che la memoria utilizzata per l'operazione sia eccessiva: cosi si butta tutto in memoria senza ritegno e poi scrive, sarebbe meglio leggerlo a chunk andandolo scrivendo
codice:
<?php
define('__BUFFER_SIZE', '8192');
define('__EMAIL_PATH', 'email_');
define('__EMAIL_PREFIX', 'email_');
define('__EMAIL_SUFFIX', '.eml');
$fpInput = fopen('php://stdin', 'r');
$fpOutput = fopen(__EMAIL_PATH . '/' . __EMAIL_PREFIX . time() . __EMAIL_SUFFIX, 'wb');
while(feof($fpInput) === false)
{
$buffer = fread($fpInput, __BUFFER_SIZE);
fwrite($fpOutput, $buffer);
}
fclose($fpInput);
fclose($fpOutput);
?>
Poi, se si vuole fare girare su linux si può anche fare
codice:
#!/usr/bin/php -q
<?php
define('__BUFFER_SIZE', '8192');
define('__EMAIL_PATH', 'email_');
define('__EMAIL_PREFIX', 'email_');
define('__EMAIL_SUFFIX', '.eml');
$fpInput = fopen('php://stdin', 'r');
$fpOutput = fopen(__EMAIL_PATH . '/' . __EMAIL_PREFIX . time() . __EMAIL_SUFFIX, 'wb');
while(feof($fpInput) === false)
{
$buffer = fread($fpInput, __BUFFER_SIZE);
fwrite($fpOutput, $buffer);
}
fclose($fpInput);
fclose($fpOutput);
?>
cosi da non dover richiamare anche l'interprete dalla configurazione di php (su linux, *bsd e mac os x)