public function show($folder, $filename) { /* La funzione deleteFileAfterSend() usata sotto non sembra funzionare molto bene, sicché qui per sicurezza provvediamo a rimuovere tutti gli eventuali files più vecchi di 24 ore onde evitare di riempire a sproposito il disco */ try { $existing = glob(sys_get_temp_dir() . 'download*'); $expiration = time() - 60 * 60 * 24; foreach ($existing as $e) { $info = stat($e); if ($info['atime'] < $expiration) { @unlink($e); } } } catch (\Exception $e) { Log::error('Errore rimuovendo vecchi files scaricati'); } $user = Auth::user(); if ($user->testAccess($folder) == true) { $contents = Cloud::readFile($folder, $filename); $path = tempnam(sys_get_temp_dir(), 'download'); file_put_contents($path, $contents); return response()->download($path, $filename)->deleteFileAfterSend(true); } else { abort(403); } }
public function handle() { $users_file = $this->argument('users'); $text_file = $this->argument('message'); if (file_exists($users_file) == false) { echo "Impossibile aprire il file con le mail degli utenti coinvolti.\n"; exit; } if (file_exists($text_file) == false) { echo "Impossibile aprire il file con il testo della mail di accompagnamento.\n"; exit; } $text = file_get_contents($text_file); $mails = file($users_file); foreach ($mails as $m) { $m = strtolower(trim($m)); if (empty($m)) { continue; } $user = User::where(DB::raw('LOWER(email)'), '=', $m)->first(); if ($user != null) { $files = Cloud::getContents($user->username); $local_files = []; foreach ($files as $f) { $filename = basename($f); $path = sprintf('/tmp/%s', $filename); $data = Cloud::readFile($user->username, $filename); file_put_contents($path, $data); $local_files[] = $path; } if (empty($local_files)) { echo "Nessun file da spedire a " . $m . "\n"; continue; } foreach ($user->emails as $e) { try { Mail::send('emails.empty', ['text' => $user->group->mailtext], function ($m) use($user, $local_files, $e) { $m->to($e, $user->name . ' ' . $user->surname)->subject('nuovo documento disponibile'); foreach ($local_files as $filepath) { $m->attach($filepath); } }); echo $m . " - " . $e . ": OK\n"; } catch (\Exception $ex) { echo $m . " - " . $e . ": FAILED\n"; } } foreach ($local_files as $f) { unlink($f); } } else { echo "Utente non trovato per mail " . $m . "\n"; } usleep(500000); } }