IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: PHP funkce unlink()

Aktivity
Avatar
MicBlack
Člen
Avatar
MicBlack:6.8.2018 21:17

Ahoj,

zkouším zprovoznit odstranění obrázků z galerie, kdy soubor, ve kterém je kód s unlink() funkcí je v jiné subdomain folder na web serveru než je samotná galerie. K odstranění daného souboru používám funkci unlink().

Na localhostu mi vše v pořádku funguje (struktura je tam trošku jiná). Nicméně na web serveru mi to začalo zlobit, nějak si neumím poradit s relativní cestou. Ukládání obrázků mi napříč subdoménami jde - celou tu cestu mám i uloženou a zkouším ji vkládat funkci unlink() - přesto to nezabere.

Soubor php, který má obrázek smazat je umístěn zde:
/web/htdocs/muj­webcz/home/sub­doms/mujWeb/mo­del <- tuto cestu získám pomocí __DIR__ v souboru GalerieManager.php

Obrázky ukládám zde:
/web/htdocs/muj­webcz/home/sub­doms/ostatni/o­brazky/galeri­e/pokus.jpg

Když se soubor pokusím odstranit, tak mi PHP vypíše chybu:
Warning: unlink(/web/htdoc­s/mujwebcz/ho­me/subdoms/muj­Web/model../.­./../ostatni/o­brazky/galeri­e/pokus.jpg): No such file or directory in /web/htdocs2/muj­webcz/home/sub­doms/epr/model/Ga­lerieManager.php on line 30

Zkusil jsem: Zkoušel jsem různě upravovat relativní cestu, ale nedaří se mi to zprovoznit.

Chci docílit: Nemáte s tím někdo zkušenost? Budu vděčný za pomoc. Díky.

 
Odpovědět
6.8.2018 21:17
Avatar
Petr Čech
Tvůrce
Avatar
Odpovídá na MicBlack
Petr Čech:6.8.2018 21:30
/web/htdocs/mujwebcz/home/subdoms/mujWeb/model../../../ostatni/obrazky/galerie/pokus.jpg)

za model ti chybí lomítko. Lomítka klidně sázej všude, Linuxu je jedno, kolik jich je za sebou - ////// je pro Linux to samé jako /

Je to tvůj server, nebo máš od někoho hosting?

Nahoru Odpovědět
6.8.2018 21:30
the cake is a lie
Avatar
David Hynek
Tvůrce
Avatar
Odpovídá na MicBlack
David Hynek:6.8.2018 21:58

Chmod mas jak?

Nahoru Odpovědět
6.8.2018 21:58
Čím víc vím, tím víc věcí nevím.
Avatar
MicBlack
Člen
Avatar
Odpovídá na Petr Čech
MicBlack:6.8.2018 22:19

OK, díky. Zkusím to doplnit.. Mám hosting od forpsi.

 
Nahoru Odpovědět
6.8.2018 22:19
Avatar
MicBlack
Člen
Avatar
Odpovídá na David Hynek
MicBlack:6.8.2018 22:28

Na adresáři galerie mám (chmod 755), na obrázku v adresáři mám (chmod 644).

 
Nahoru Odpovědět
6.8.2018 22:28
Avatar
Petr Čech
Tvůrce
Avatar
Odpovídá na MicBlack
Petr Čech:6.8.2018 23:10

Tak potom máš práva špatně. Pro adresář musíš mít právo x, abys do něj mohl vstoupit (a v nadřazených adresářích)
Mohl bys nastavit práva 775 pro adresář a 664 pro soubory (x v galerii není dobrý nápad :-` ). Tedy jsi to skoro trefil, ale ne úplně.

Nahoru Odpovědět
6.8.2018 23:10
the cake is a lie
Avatar
MicBlack
Člen
Avatar
Odpovídá na Petr Čech
MicBlack:7.8.2018 8:41

Aha. Tak to zkusím přenastavit.. A tomu nastavení pro soubory v adresáři.. Budou se mi ta práva správně nastavovat automaticky, když tam nahrajju nový obrázek přes svou aplikaci? Případně, kde ovlivním s jakými oprávněními se tam mají obrázky ukládat?

Díky moc za pomoc - s tímhle se setkávám poprvé..

 
Nahoru Odpovědět
7.8.2018 8:41
Avatar
Petr Čech
Tvůrce
Avatar
Odpovídá na MicBlack
Petr Čech:7.8.2018 9:23

Nejsem si jist, ale pro soubory by mělo stačit upravit umask (příkaz umask).

Nahoru Odpovědět
7.8.2018 9:23
the cake is a lie
Avatar
MicBlack
Člen
Avatar
Odpovídá na MicBlack
MicBlack:7.8.2018 9:29

Tak jsem to zkusil přenastavit + jsem doplnil lomítko do cesty k souboru, ale nepomohlo to.

 
Nahoru Odpovědět
7.8.2018 9:29
Avatar
Petr Čech
Tvůrce
Avatar
Odpovídá na MicBlack
Petr Čech:7.8.2018 10:07

Tak potom máš tu cestu prostě špatně.

Nahoru Odpovědět
7.8.2018 10:07
the cake is a lie
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:7.8.2018 10:22

unlink(/web/htdoc­s/mujwebcz/ho­me/subdoms/muj­Web/model../.­./../ostatni/o­brazky/galeri­e/pokus.jpg):
"No such file or directory "
= Soubor / Adresar neexistuje.

Obrázky ukládám zde:
/web/htdocs/muj­webcz/home/sub­doms/ostatni/o­brazky/galeri­e/pokus.jpg
/web/htdocs/muj­webcz/home/sub­doms/mujWeb/mo­del../../../os­tatni/obrazky/ga­lerie/pokus.jpg - tady schazi lomitko
/web/htdocs/muj­webcz/home/sub­doms/mujWeb/mo­del/../../../os­tatni/obrazky/ga­lerie/pokus.jpg - s lomitkem
/web/htdocs/muj­webcz/home/sub­doms/mujWeb/.­./../ostatni/o­brazky/galeri­e/pokus.jpg - provedeno ../
/web/htdocs/muj­webcz/home/sub­doms/../ostat­ni/obrazky/ga­lerie/pokus.jpg - provedeno ../
/web/htdocs/muj­webcz/home/os­tatni/obrazky/ga­lerie/pokus.jpg - provedeno ../
/web/htdocs/muj­webcz/home/sub­doms/ostatni/o­brazky/galeri­e/pokus.jpg - no, ale prvne jsi psal, ze cesta k obrazku ma byt takovato. To je uplne jina cesta, ze?

Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
 
Nahoru Odpovědět
7.8.2018 10:22
Avatar
MicBlack
Člen
Avatar
Odpovídá na Petr Čech
MicBlack:7.8.2018 22:30

Možný to je, ale nechápu to. Tu cestu k tomu obrázku si ukládám do DB při vytvoření a uložení toho obrázku:
/web/htdocs/muj­webcz/home/sub­doms/ostatni/o­brazky/galeri­e/pokus.jpg

Měl jsem za to, že při vymazání obrázku pomocí unlink() bude pak stačit tu cestu z DB vytáhnout a vložit jako vstup do unlink().

 
Nahoru Odpovědět
7.8.2018 22:30
Avatar
MicBlack
Člen
Avatar
Odpovídá na Peter Mlich
MicBlack:7.8.2018 22:32

Ano cesta k obrázku je tato:
/web/htdocs/muj­webcz/home/sub­doms/ostatni/o­brazky/galeri­e/pokus.jpg

Nicméně, php skript který má obrázek smazat je volán v tom adresáři:
/web/htdocs/muj­webcz/home/sub­doms/mujWeb/mo­del/GalerieMa­nager.php

Proto tam pak skládám tu relativní cestu, abych se k obrázku dostal. Nebo do unlink() stačí dát prostě absolutní cestu (/web/htdocs/muj­webcz/home/sub­doms/ostatni/o­brazky/galeri­e/pokus.jpg) k obrázku, ať se skript vykoná v jakémkoliv adresáři?

 
Nahoru Odpovědět
7.8.2018 22:32
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:8.8.2018 8:58

No, ale ja ti to cele vypsal, abys videl, co delas spatne. Radek po radku, kazde ../ zvlast. A nejdriv jsem tam pridal to lomitko, ktere tam nebylo.

'Nebo do unlink() stačí dát prostě absolutní cestu ' - To nejdriv zkus, ne? :) Vytvoris jednoradkovy program

<?php
unlink('/web/htdocs/mujwebcz/home/subdoms/ostatni/obrazky/galerie/pokus.jpg');
?>

Vytvoris si tam soubor, spustis a bud to smaze nebo ne.

 
Nahoru Odpovědět
8.8.2018 8:58
Avatar
MicBlack
Člen
Avatar
MicBlack:8.8.2018 20:40

Tak stačilo dát do funkce unlink() absolutní cestu a vše funguje perfektně. Díky za pomoc!

 
Nahoru Odpovědět
8.8.2018 20:40
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 15 zpráv z 15.