Mikähän olisi kätevin ja yksinkertaisin tapa toteuttaa nettisivulle 'submit' -namikka, joka nimeäsi samassa kansiossa olevan html-tiedoston siten että uudelleen nimetyn tiedoston alkuun tulisi 'date stamp'.
Ilmeisesti PHP tai JavaScript olisivat kykeneviä tähän toimenpiteeseen?
Olen parin päivä ajan kokeillut erilaisia php-scriptejä - joita olen netistä löytänyt - mutta en ole vielä saanut hommaa toimimaan.
Voisiko joku joka on mahdollisesti toteuttanut samankaltaisen toiminnon auttaa avutonta? Itse en todellakaan ole mikään PHP:n enkä suuremmin Javascriptinkään tuntija.
Kiitos jo etukäteen.
JavaScriptillä et voi nimetä uudelleen tiedostoja, sillä et voi käsitellä sillä serveripuolen asioita. PHP:llä tosin onnistuu.
Funktiolla rename voit uudelleennimetä tiedoston. date-funktio taas palauttaa päivämäärän haluamassasi muodossa.
Kysymyksestä varmaan puuttuu jotain olennaista, koska jos tavoitteena on vain nimetä yksi tiedosto uudestaan, ongelma ratkeaa ilman ohjelmointia tiedostoselaimen avulla. Eli onko tarkoitus esimerkiksi tulostaa lista kaikista tiedostoista ja valita siitä käsiteltävä tiedosto, vai mistä oikein on kyse?
Yksinkertainen koodi näyttäisi tältä:
<form action="skripti.php" method="POST"> <button type="submit" name="tiedosto" value="testi.html"> Muunna testi.html </button> <button type="submit" name="tiedosto" value="toinen.html"> Muunna toinen.html </button> </form>
<?php // Hyväksy vain oikeat tiedostot, jottei hakkeri pääse iskemään. $tiedostot = ["testi.html", "toinen.html"]; $tiedosto = @$_POST["tiedosto"]; if (!in_array($tiedosto, $tiedostot)) { http_response_code(403); die("Tiedostoa ei voi nimetä!"); } elseif (!file_exists($tiedosto)) { http_response_code(404); die("Tiedostoa ei ole!"); } else { rename($tiedosto, date("Y-m-d-").$tiedosto); die("OK!"); }
tsehov kirjoitti:
Olen parin päivä ajan kokeillut erilaisia php-scriptejä - joita olen netistä löytänyt - mutta en ole vielä saanut hommaa toimimaan.
Satunnaisten koodien kokeileminen on aika huono lähestymistapa ohjelmointiin. Onko mitään käsitystä, mitä ne kokeilemasi koodit tekevät ja miksi ne mielestäsi eivät toimi? Oletko yrittänyt ratkaista ongelmaa loogisesti esim. sellaisina vaiheina kuin (1) tee lähetysnappi, (2) selvitä tiedoston nimi, (3) selvitä päivämäärä, (4) yhdistä näistä uusi nimi, (5) etsi funktio tiedoston nimen vaihtoon?
Macro kirjoitti:
JavaScriptillä et voi nimetä uudelleen tiedostoja, sillä et voi käsitellä sillä serveripuolen asioita.
Ihan vaan tiedoksi:
https://en.wikipedia.org/wiki/Server-side_JavaScript#Server-side_JavaScript
Osmo kirjoitti:
JavaScriptiä on käytetty palvelinpuolella jo yli kaksi vuosikymmentä.
Kysyjän antaman kuvan perusteella tämä tuskin oli kyseessä.
Kiitos kiinnostavista vastauksista. Taisin tosiaan kuvata tarpeeni turhan ylimalkaisesti.
Tilanne on sellainen, että olen tekemässä eräälle yhteisölle (Saamelaiskäräjät) muuatta chat -sovellusta - tai siis en ole itse sitä tehnyt: olen löytänyt sen netistä ja hiukan tarpeen mukaan editoinut sitä. Chat löytyy osoitteesta: http://www.sogku.fi/live. Se toimiikin ihan OK, mutta ongelma on sellainen, että chat kirjaa kaikki kommentit logiin (log.html), ja jotta chat olisi tyhjä jokaisen seminaarin tms.:n jälkeen, pitää jonkun mennä esim. ftp:llä poistamaan/uudelleennimeämään po. logi-tiedosto. Nyt henkilöt, jotka hoitaisivat kyseisen toimenpiteen tarvitsisivat ftp-palvelimemme tunnukset, joita ei kuitenkaan haluta jaella sinne tänne. Toisekseen peruskäyttäjät kokevat ftp:n käytön melko hankalaksi jne.
Haluttaisiin siis nettisivu, johon kirjautumalla (tunnistautuminen esim. htaccessin avulla) henkilö vain klikkaisi nappia (submit), joka nimeäsi uudelleen log.html -tiedoston, jolloin chat toimisi taas ns. puhtaalta pöydältä.
Olen kokeillut muutamia php-skriptejä, joita olen netistä löytänyt mm. seuraavanlaista:
rename (WEB_ROOT."/public_html/testi/log.html", WEB_ROOT."/public_html/testi/log_old.html");
Tuo antaa seuraavaa virheilmoitusta:
[29-Jan-2016 10:30:42 Europe/Helsinki] PHP Warning: rename(WEB_ROOT/public_html/testi/log.html,
[29-Jan-2016 10:30:49 Europe/Helsinki] PHP Warning: rename(WEB_ROOT/public_html/testi/log.html,
Eli se ei löydä kyseistä tiedostoa mainitun polun päästä...
Toivottavasti tämä selvitti hiukan, mistä on kysymys.
Kiitos jo etukäteen.
Eikös tuossa virheessä selvästi sanota mistä on kyse: palvelimellasi ei ole tiedostoa WEB_ROOT/public_html/testi/log.html
Mistäs tämä sitten johtuu. No varmaankin siitä, että olet käyttänyt vakiota WEB_ROOT määrittelemättä sitä. Eli jos missään ei ole komentoa tyyliin
define('WEB_ROOT', '/home2/sogkup4j');
Niin eihän se voi toimia. PHP tulkitsee että olet vaan halunnut kirjoittaa tekstin WEB_ROOT, mutta unohtanut laittaa lainausmerkit ympärille.
Vaihtoehtoisesti voisit varmaankin laittaa vaan suoraan kiinteät polut
rename ('/home2/sogkup4j/public_html/testi/log.html', '/home2/sogkup4j/public_html/testi/log_old.html');
Ottaen huomioon että skripti on samassa hakemistossa kuin tiedostot, niin yksinkertaisin voisi olla suhteellinen
rename ('log.html', 'log_old.html');
Grez kirjoitti:
Ottaen huomioon että skripti on samassa hakemistossa kuin tiedostot, niin yksinkertaisin voisi olla suhteellinen
rename ('log.html', 'log_old.html');
Suuret kiitokset, yllä oleva määrittely ratkaisi pulman.
Kiitos myös muille apuaan ystävällisesti tarjonneille.
Jaahas, vieläkin tuottaa ongelmia.
Siellä on nyt seuraavanlainen koodi
<?php $file = 'log.html'; $firstName = 'OLD_log'; $timestamp = time(); rename($file,.$firstName.'-'.$timestamp.'.txt'); ?>
Antaa tuollaisen errorin:
[01-Feb-2016 10:41:33 Europe/Helsinki] PHP Parse error: syntax error, unexpected '.' in /home2/sogkup4j/public_html/testi/rename.php on line 5
Ota $firstName muuttujan edestä piste pois.
Antaa edelleen saman errorin???
tsehov kirjoitti:
(01.02.2016 11:47:06): Antaa edelleen saman errorin???
Otithan pisteen pois muuttujan $firstName
edestä etkä jäljestä?
Juuri noin: edestä poistin pisteen.
Ja korjattu koodi, joka edelleen antaa tuon virheilmoituksen on?
Nyt siellä on:
<?php $file = 'log.html'; $firstName = 'OLD_log'; $timestamp = time(); rename($file, $firstName.'-'.$timestamp.'.txt'); ?>
Ja tulos on:
[01-Feb-2016 20:39:06 Europe/Helsinki] PHP Warning: rename(log.html,OLD_log-1454351946.txt): No such file or directory in /home2/sogkup4j/public_html/testi/rename.php on line 5
mitäs tuo virheilmoitus mielestäsi tarkoittaa suomeksi?
No niin, se tarkoittaa ettei siellä hakemistossa ole sen nimistä tiedostoa. Mutta siellä on log.html -niminen tiedosto.
Lisäys: Huomasin äsken oudon seikan ongelmaani liittyen: vaikka errorlog näyttääkin yllä mainitun virheen, kun kirjauduin jonkin ajan kuluttua uudelleen ftp:llä kansioon olikin skripti uudelleennimennyt tiedoston.
Luonnollisesti ekalla kerralla se toimii, toisella ei, koska ei sellaista tiedostoa ole enää.
Niin, mutta kun minä ehdin jo lisätä tiedoston 'log.hml' uudelleen sinne ennen kuin ajoin skriptin.
Ei ne virheilmoitukset kyllä tyhjästä ilmesty, että jossain kohtaa olet varmaan tehnyt jotain väärin.
Mahdolliset virhetilanteet kannattaa huomioida jo koodia tehdessä, jotta virheilmoitukset ovat selvät tai turhia ilmoituksia ei tule. Kokeilepa näin:
<?php $file = 'log.html'; $file2 = 'OLD_log-' . date('Y-m-d_H.i.s') . '.txt'; if (!file_exists($file)) { echo "Tiedostoa $file ei ole.\n"; } elseif (!@rename($file, $file2)) { echo "Siirto epäonnistui!\n"; } else { echo "Siirto onnistui. Nimi: $file2\n"; }
tsehov kirjoitti:
Antaa edelleen saman errorin???
Jos nyt vähän siristät silmiäsi, niin ei kai se nyt ihan sama ollut? "Parse error" vs. "No such file"...
Kiitos taas avusta.
Kopioin Metabolixin laittaman tekstin skriptiin, ja se vastaa (selaimessa): 'Tiedostoa log.html ei ole.' Todellisuudessa siellä on tismalleen tuon niminen tiedosto ('log.html').
Parin testauksen tuloksena skripti teki juuri halutun toimenpiteen - ja ilmoittikin siirron onnistuneen, mutta uudelleen testailtuani taas sama ongelma: 'Tiedostoa log.html ei ole.' vaikka olen tiedoston sinne kopioinut uudelleen.
Kuuluuko asiaan, että toiminnon suorittamisessa on jonkinlainen muutaman minuutin viive?
Olen itsekin nähnyt (nic.fi-palvelimilla) tuollaisen jännän synkronointiongelman FTP:n ja PHP:n välillä. Se ei kuulu asiaan, mutta asialle ei voi mitään (paitsi hankkia paremman palvelimen tai valittaa asiakaspalveluun). Ehkä viisainta on unohtaa koko FTP ja käyttää sen sijaan jotain PHP:llä toteutettua tiedostonhallintaa.
Aihe on jo aika vanha, joten et voi enää vastata siihen.