Vánoční nadílka Vánoční nadílka
Až 80% zdarma! Předvánoční BLACK FRIDAY akce. Více informací

Diskuze: PHP funkce unlink()

PHP PHP PHP funkce unlink() American English version English version

Aktivity (1)
Avatar
MicBlack
Člen
Avatar
MicBlack:6. srpna 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. srpna 21:17
Avatar
Petr Čech
Redaktor
Avatar
Odpovídá na MicBlack
Petr Čech:6. srpna 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. srpna 21:30
the cake is a lie
Avatar
David Hynek
Redaktor
Avatar
Odpovídá na MicBlack
David Hynek:6. srpna 21:58

Chmod mas jak?

Nahoru Odpovědět  +1 6. srpna 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. srpna 22:19

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

 
Nahoru Odpovědět 6. srpna 22:19
Avatar
MicBlack
Člen
Avatar
Odpovídá na David Hynek
MicBlack:6. srpna 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. srpna 22:28
Avatar
Petr Čech
Redaktor
Avatar
Odpovídá na MicBlack
Petr Čech:6. srpna 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. srpna 23:10
the cake is a lie
Avatar
MicBlack
Člen
Avatar
Odpovídá na Petr Čech
MicBlack:7. srpna 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. srpna 8:41
Avatar
Petr Čech
Redaktor
Avatar
Odpovídá na MicBlack
Petr Čech:7. srpna 9:23

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

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

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

 
Nahoru Odpovědět 7. srpna 9:29
Avatar
Petr Čech
Redaktor
Avatar
Odpovídá na MicBlack
Petr Čech:7. srpna 10:07

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

Nahoru Odpovědět 7. srpna 10:07
the cake is a lie
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:7. srpna 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í
+1 bodů
Řešení problému
 
Nahoru Odpovědět 7. srpna 10:22
Avatar
MicBlack
Člen
Avatar
Odpovídá na Petr Čech
MicBlack:7. srpna 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. srpna 22:30
Avatar
MicBlack
Člen
Avatar
Odpovídá na Peter Mlich
MicBlack:7. srpna 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. srpna 22:32
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:8. srpna 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. srpna 8:58
Avatar
MicBlack
Člen
Avatar
MicBlack:8. srpna 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. srpna 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.