Keskustelut - PHP - kuvan unlink


editoitu: 17:12 20.3.05
olaav 17:11 20.3.05 
Eikös kuvan poisto pitäisi onnistua näin?

unlink("kuva.jpg");


muokkaus.php ja kuva ovat samassa hakemistossa. Muokkaus.php:lla oikeudet 777. Kuvalla 644 (eihän kuvalta voi edes muuttaa)
Kuitenkin silmille läsähtää virheilmoitus: Warning: unlink(kuva.jpg ): No such file or directory in /home/int2000/xxxxxx/html/php/muokkaus.php on line 73

Missä vika?
tsuriga 17:38 20.3.05 
Mitenniin kuvalta ei voisi muka muuttaa oikeuksia? Mitäpä sanoo tällainen pätkä?
<?php
if (file_exists("kuva.jpg")) unlink("kuva.jpg");
else echo "foobar";
?>

Eli löytääkö php ollenkaan tuota kuvaa vai onko unlinkin toiminnassa jotain outoa?
coaster 17:38 20.3.05 
Onko kansiolla tarpeeksi oikeuksia? Ainakin mbnetissä tarvi laittaa kansiollekin riittävästi oikeuksia, että tiedoston pystyi poistamaan.

Virheilmoitus tosin kertoisi että ko. tiedostoa ei edes olisi olemassa, mutta tiedä häntä...

editoitu: 19:41 20.3.05
hegu 19:39 20.3.05 
- Kuka tuon kuvan owner?
- Voisikos olla että ajat skriptiä html -hakemistosta (include("php/muokkaus.php") ) ja skripti olettaa että kuva on html -hakemistossa?
- Isot ja pienet kirjaimet?
- Muutapa kuitenkin kuvan oikeuksia (777) ja yritä uudelleen skriptillä.
phadej 23:03 20.3.05 
ei 777 vaan 666, ei mitään ajo-oikeuksia kuvalle. prkl
olaav 00:07 21.3.05 
hegu kirjoitti:
- Muutapa kuitenkin kuvan oikeuksia (777) ja yritä uudelleen skriptillä.


Mikähän on kun en pysty kuvan oikeuksia muuttamaan. Olen värkkäämässä uutisten hallintasivua jossa on kuvan upload mahdollisuus. Kuva kuva.jpg on siis siirretty palvelimelle selaimella. FTP:llä siirrettyjen kuvien oikeuksia pystyn kyllä muuttamaan.

Upload tapahtuu näin:

...
<input type="file" name="file">
<input type="submit" name="uusi" value="Lisää uutinen">
...


...
if ($_POST['uusi'])
{
    $max_size = 500000;
    $hakemisto = "";
    $file_size     = $_FILES['file']['size'];
    $file_name     = $_FILES['file']['name'];
    $file_tmp_name = $_FILES['file']['tmp_name'];
    $file_type     = $_FILES['file']['type'];

    if (file_exists("$hakemisto" . "$file_name")) { die("Samanniminen tiedosto on jo ladattu!"); }
   
    if ((int)$file_size > (int)$max_size) { die("Tiedoston koko on liian suuri! Suurin sallittu koko on " . $max_size . " tavua."); }
   
    $type = explode("/", $file_type);
    $type = $type[0];
    if ($type != "image") { die("Tiedosto ei ole kuva"); }

    move_uploaded_file ($file_tmp_name, $hakemisto . $file_name);

if ($file) {
    uploadimg($file);}
}
...


Miten pystyn muuttamaan kuvan oikeuksia heti siirtovaiheessa?
editoitu: 00:40 21.3.05
peku 00:39 21.3.05 
olaav kirjoitti:

Miten pystyn muuttamaan kuvan oikeuksia heti siirtovaiheessa?


...

    move_uploaded_file ($file_tmp_name, $hakemisto . $file_name);
    chmod(($file_tmp_name, $hakemisto . $file_name), 0666);
...


Jotenkin noin, apua löytyy manuaalista
Kaksois-W 07:21 21.3.05 
Sun pitää tehdä toi unlink -skripta cgi-modissa. Eli ongemana tässä lienee se, että sen kuvan on kirjoittanut levylle www-data käyttäjätunnus ja sitä yrittää poistaa toinen www-data ja tämähän ei unixissa onnistu.

Omasta kotihakemistosta voi käsittääkseni poistaa kenen tahansa tiedostoja, jos omaa kirjoitusoikeudet (u+w). Joten se kuvan upload skripta pitäisi ajaa cgi-modissa tai vähintäänkin se kuvanpoistaja. Ongelmana on vain, että minun tietoni mukaan int2000:lla ei pysty php:tä ajamaan cgi-modissa. Perliä voit.
editoitu: 19:44 21.3.05
olaav 19:43 21.3.05 
Onnistuin muuttamaan kuvan oikeuksia uploadissa, mutta ei siitä apua ollut.

Kaksois-W kirjoitti:
Sun pitää tehdä toi unlink -skripta cgi-modissa.


Nyt meni meikäläiseltä sormi suuhun. Sen verran CGI :stä tiedän että siinä on kolme kirjainta. Ja siihen loppu tieto... Eli en siis tiedä yhtään mitä tehdä. Voisko joku valaista miten tulee toimia tai antaa edes linkki johonkin oppaaseen yms. (suomen kielinen kiitos!)
editoitu: 12:30 22.3.05
ajv 12:28 22.3.05 
Ei se CGI sen vaikaemapaa ole:
#!/usr/bin/php
<?php
   echo "HELLO CGI";
?>

Ja tuon nimeät esim. hello.cgi ja oikeudet 700.
/usr/bin/php tilalle laitat tietenkin oman php:si sijainnin, joka selviää esim. komennolla which php.
Jos palvelimellasi ei ole cgi-tukea, etkä itse pääse apachen conffeja sörkkimään, niin sitten on tietenkin vähän eri juttu.
Kaksois-W 14:29 22.3.05 
Ja nuo oikeudet pitää kysyä ylläpidolta, se riippuu miten se on säädetty. Toisilla toimii just niillä, toisilla vähän laajemmat.
editoitu: 00:28 23.3.05
olaav 00:25 23.3.05 
Heh pikkasen jo hävettää..

Kuva uploadissa oli tällainen rivi:
$rivi = "$otsikko|$uutinen|$file_name\n";

eli yritin poistaa kuvaa näin unlink("$file_name\n"); ei taida onnistua...:|

tein korjauksen: $rivi = "$otsikko|$uutinen|$file_name|\n"; ja nyt toimii hyvin. Ei enää mitään hätää.