Otevření souboru z FTP – cesta
- Tymikes
- Člen | 63
Zdravim,
upload souboru a mazání mi funguje s cestou dobře, ale pokud v latte
vytvořím klasický odkaz.
<a href="{$priloha->cesta_souboru}">{$priloha->jmeno_souboru}</a></div>
generuje se mi následující odkaz:
domena.eu/data/web/virtuals/124211/virtual/www/domains/domena.tld/www/upload/login.png
Ale soubor je na adrese
domena.eu/domains/domena.tld/www/upload/login.png
Chtěl bych se zeptat, jestli už v tuto chvíli se musím nějak hrabat v routování (protože jsem to do teď vůbec neřešil a ještě se do toho nechci pouštět) a ještě jestli je nějaký lepší způsob, jak stahovat přílohu (resp. více bezpečnější, protože momentálně si jí může stáhnout každý).
Editoval Tymikes (7. 4. 2016 14:46)
- Tymikes
- Člen | 63
Otevrím téma, abych nemusel vytvářet nový, snažím se o stažení souboru přes readfile. Nefunguje ani na ostrém serveru ani v localhostu (unlink např. funguje), zkoušel jsem víc druhů cesty, mám i cestu přímo vytvořenou v db (viz. výše) např.:
public function actionStahnoutPrilohu($id_ukolu) {
$soubor = $this->ukoly->getSouborByID($id_ukolu);
$cesta = $this->getHttpRequest()->getUrl()->getBasePath()."upload/";
if (file_exists($soubor->cesta_souboru)) {
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="'.basename($soubor->nazev_souboru);
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . filesize($soubor->velikost_souboru));
readfile($cesta . $soubor->jmeno_souboru);
exit;
}}
Editoval Tymikes (16. 4. 2016 19:03)
- David Matějka
- Moderator | 6445
kdyz ctes z file systemu, tak te nezajima zadna URL. Zajima te ten adresar, kde je to fyzicky ulozeny
- Tymikes
- Člen | 63
Nefunguje znamená, že mi napíše. Soubor nenalezen.
Firefox nemůže nalézt soubor
domain.eu/domains/domains.tld/ukol/stahnout-prilohu?id_ukolu=18
Adresář mám v db uložený právě takto
/data/web/virtuals/124211/virtual/www/domains/domena.tld/www/upload/g.png a
přes něj se to taky nechytne, jak se odstanu teda k www/upload? Někde na
fóru jsem našel konstantu WWW_DIR, ale nefunguje mi.
Editoval Tymikes (15. 4. 2016 16:15)
- Tymikes
- Člen | 63
Jo, pro mě adresa na pevno je to, co mě vygeneruje následující třída.
<?php
namespace App\Services;
class WebDir {
private $wwwDir;
public function __construct($wwwDir) {
$this->wwwDir = $wwwDir;
}
public function getPath($fromBaseDir=''){
return $this->wwwDir.DIRECTORY_SEPARATOR.$fromBaseDir;
}
}
A pak přidávám soubor např.
$cesta_souboru = ($this->webDir->getPath('upload/' . $jmeno));
A v localhostu to generuje, jak jsem psal výše.
localhost je ukládá
D:\Programy\XAMPP\htdocs\Ukol\www\upload/g.png
/data/web/virtuals/124211/virtual/www/domains/domena.tld/www/upload/g.png
Můžu zkusit tam dát úplně ručně, sice budu tipovat od jaké části mám začít.
- David Matějka
- Moderator | 6445
Pri praci se soubory z php musis pracovat s kompletni cestou, kde je to ulozeny na disku – tedy vcetne nejakeho wwwDir, stejne jako kdyz soubor ukladas.
- Tymikes
- Člen | 63
//Tak to bylo v tomto.
header('Content-Disposition: attachment; filename="'.basename($soubor->nazev_souboru);
Chtělo to zase plnou cestu, jsem totiž viděl jen filename a už jsem tam hned narval jen název -.-
header('Content-Disposition: attachment; filename="'.basename($soubor->cesta_souboru);
Díky hoši :) opět pořešeno :)
Editoval Tymikes (16. 4. 2016 19:13)
- David Matějka
- Moderator | 6445
filesize($soubor->velikost_souboru)
tohle je spatne. Filesize vraci velikost pro nazev souboru, ktery tam predas.