Kirjautuminen

Haku

Tehtävät

Keskustelu: Koodit: PHP: Tiedostojen uudelleennimeäjä (Paranneltu verio)

Sivun loppuun

Kentti [25.08.2006 18:20:32]

#

Tällä skriptillä voit nopeasti ja vaivattomasti uudelleennimetä useita tiedostoja. Suunniteltu digikuvien uudelleennimeämiseen, mutta toimii kaikkiin tiedostoihin.
Nimeää tiedostot "jotain.1.jpeg,jotain.2.jpeg,...jotain.n.jpeg"
Tämä säilyttää alkuperäisen tarkentimen.

Tuli vähän HTML:ää ja CSS:ää ulkoasun parantamiseksi mukaan...

Toimii ainakin Windows XP + IE.
Omalla koneella tiedostot pystyi ainakin nimeämään suoraan niiden kansiosta, vaikka se olisikin juurihakemiston ulkopuolella.

kuvannimeäjä.php

<?php
  #Itse PHP-koodi:

  #####################
  # PALAUTTEEN ANTAJA #
  #####################

  function anna_kayttajapalaute($palauteString) {

	#Hajoita $palauteString taulukkoon käyttämällä explodea.#
	$palauteTaulukko = explode("|", $palauteString);

	#Liitä taulukko jälleen merkkijonoksi, ja lisää <br /> jokaisen alkion loppuun.#
	$palaute = implode("<br />", $palauteTaulukko);
	return $palaute;

  }

  ############################
  # KANSION NIMEN PALAUTTAJA #
  ############################
  function kerro_kansio($kansio) {

	if($kansio != "") {
		#Lue kansio taulukkoon.#
		$taulukko=str_split($kansio);

		#Jos taulukon pituus on yli 33-merkkiä, lisää ... perään.#
		if(count($taulukko) > 33) {
			for($n=0; $n <= 33; $n++) {
				$palauteKansio .= $taulukko[$n];
			}
		$palauteKansio .= "...";
		} else {
			$palauteKansio=$kansio;
		}

		#Laita kansiolle akronyymi, jossa näkyy kansion koko nimi.#
		return "<span class=\"kansio\"><acronym title=\"$kansio\">$palauteKansio</acronym></span>";
	} else {
		return "<span class=\"kansio\">Et ole kirjoittanut yhtään kansionnimeä</span>";
	}
  }



  ################################
  # TIEDOSTOJEN UUDELLEENNIMEÄJÄ #
  ################################

  function uudelleennimea_tiedostot($kansio, $nimi, &$palauteString) {
	#Lue hakemisto taulukkoon, jos submit-nappia on painettu.#
	if(isset($_POST['submit'])) {
		$taulukko=scandir($kansio) or die('<p class="virhe"><span class="huutomerkki">!</span>
						Hakemistoa ei pystytty lukemaan taulukkoon. Tarkista, että kirjoitit kansion nimen oikein!</p></body></html>');
		usort($taulukko,"strnatcmp");
	}

	$palauteString .= '<center><div class="overflow">';

	#Silmukoi jokaisen alkion läpi.#
 	foreach($taulukko as $numero => $filu) {

		#Tiedoston vanha nimi täydellisellä hakemistopolulla.#
		$vanhaNimi=$kansio."\\".$filu;

		#Poistetaan $numero-muuttujasta 1, jotta nimien numerointi alkaisi yhdestä (Listaus: [0] => . [1] => ..).#
		$numero = $numero - 1;

		#Määritä tiedoston tarkennin.#
		$tarkenninFilu=explode(".",$filu);
		$i=count($tarkenninFilu)-1;
		$tarkennin=$tarkenninFilu[$i];


		#Määritellään uusi nimi täydellisellä hakemistopolulla.#
		$uusiNimi=$kansio."\\".$nimi.".".$numero.".".$tarkennin;

		#Nimetään tiedostot uudestaan. HUOM! Tähän kohtaan EI VOI LAITTAA "or die()", sillä silloin tulee Permission Denied-virhe.#
		#Koodi on valitettavasti vain niin itsepäinen, ettei edes if-lauseella toteutettu virhesanoma toimi. Tässä siis täytyy luottaa#
		#siihen, että ilman viestejä pärjätään.#

		$uudelleennimeaminen=rename($vanhaNimi, $uusiNimi);

		#Käyttäjälle menevä viestitys...#
		if($uudelleennimeaminen !=false) $palauteString .= basename($vanhaNimi)." => ".basename($uusiNimi)."|";
		else {
			if(basename($vanhaNimi)=="." or basename($vanhaNimi)=="..") continue;
			else {
				$palauteString .= "<p class='virhe'><span class='huutomerkki'>!</span>".basename($vanhaNimi)." => ".basename($uusiNimi).
						  "<font color='black'>***</font>Uudelleennime&auml;minen ep&auml;onnistui</p>|";
				break;
			}
		}
	}

	$palauteString .= "</div></center>";

  	if(isset($_POST['submit'])) {
  		if($uudelleennimeaminen !=false) echo "<script language='javascript' type='text/javascript'>
							alert('Onnistui!')
							</script>";
		else echo "<script language='javascript' type='text/javascript'>
							alert('Virhe tapahtui!')
							</script>";
	}
  }

?>

tiedostonnimeäjä.php

<?php
  #HTML-pohja:
  require("kuvannimeaja.php");
  $kansio=strip_tags($_POST['kansio']);
  $nimi=strip_tags($_POST['nimi']);
  $palaute="";
?>
<html>
<head>
<title>Tiedostonnime&auml;j&auml; 2.0</title>
<link rel="stylesheet" type="text/css" language="css" href="tyyli.css">
</head>

<body>

<table class="taulu">
  <caption onMouseOver='this.className="otsikkoPaalla"' onMouseOut='this.className="otsikko"' class="otsikko">
	Tiedostonnime&auml;j&auml; 2.0
  </caption>

  <tr class="paarivi">
	<td class="tiedot">
		<p class="tiedot">Uudelleenime&auml;misen tiedot:</p>

		<p class="alatiedot">Kansio, jonka tiedostot uudelleennimettiin:
		<br />
		<?php echo kerro_kansio($kansio);?>
		</p>
		<p class="alatiedot">Uusi nimi:
		<br />
		<?php if ($_POST['nimi'] != "") echo "<span class=\"kansio\">".$nimi."</span>";
		 else echo "<span class=\"kansio\">Et ole kirjoittanut yhtään kansionnimeä</span>";?>
		</p>

	</td>
	<td class="vali">
	</td>
	<td class="paaosa">
		<form method="post" action="http://localhost/Uudelleennimeaja/tiedostonnimeaja.php">
  			<p class="perusteksti">
			Kansio, jossa tiedostot ovat. Huomaa, ett&auml; jos kansiossa on muita kansioita, <br />
			niiden sis&auml;lt&ouml;&auml; ei uudelleennimet&auml; mitenk&auml;&auml;n, mutta kansiot <br />
			nimet&auml;&auml;n vastaavasti kuin muutkin tiedostot.
  			</p>

  			<input type="text" name="kansio">
  			<br />

  			<p class="perusteksti">
			Tiedoston nimi. Tiedostot nimet&auml;&auml;n t&auml;h&auml;n tyyliin: jotain.1 , jotain.1 , jotain.2 jne.<br />
			T&auml;m&auml; nimi tekee jokaisen tiedoston nimest&auml; yksil&ouml;llisen, mik&auml;li uudelleennime&auml;t useita<br />
			eri kansioita ja laitat jokaisen kansion kohdalla t&auml;h&auml;n eri nimen.<br />
			Huom! Nimess&auml; <strong>EI SAA OLLA</strong> muita merkkej&auml; kuin A-&Ouml;, a-&ouml;, 0-9 ja .
  			</p>

  			<input type="text" name="nimi">
  			<br />
  			<br />
  			<input type="submit" value="Nime&auml; uudelleen" name="submit" class="submit">
		</form>
	</td>
  </tr>
</table>

<?php
  uudelleennimea_tiedostot($kansio, $nimi, $palaute);
  echo anna_kayttajapalaute($palaute);
?>
</body>
</html>

tyyli.css

/*BODY*/
body{background:#faeac5; padding:1cm 1cm 1cm 0cm;}

/*TAULU*/
table.taulu{background:#faeac5;}
caption.otsikkoPaalla{color:#FFC125; font-family:Comic Sans MS; font-size:0.8cm; font-weight:bold;}
caption.otsikko{color:#CD9B1D; font-family:Comic Sans MS; font-size:0.8cm; font-weight:bold;}
p.perusteksti{color:#CD950C; font-family:Comic Sans MS; font-size:0.5cm;}
input.submit{color:#CDAD00; font-family:Comic Sans MS; font-size:0.6cm; background:#fadac5; border-style:outset; border-width:1px 2px 2px 1px;}
td.tiedot{height:100%; width:10cm; border-style:ridge; border-width:3px 6px 0px 0px; border-color:#FFDAB9; padding:0.3cm 0.3cm 1cm 0.5cm;}
td.vali{width:0.5cm;}

/*PALAUTETIEDOT*/
p.virhe{color:red; font-family: Comic Sans MS; font-size:0.5cm;}
span.huutomerkki{font-family:Dutch801 XBd BT; color:#fe0000; font-size:1cm; font-weight:bold;}
p.onnistui{font-family:Comic Sans MS; color:#05ff00; font-size:0.5cm;}

/*UUDELLEENNIMEÄMISEN TIEDOT*/
p.tiedot{color:#4169E1; font-family:Comic Sans MS; font-weight:bold; text-decoration:underline; font-size:0.6cm; position:relative; top:-20%;}
div.overflow{background:#F5DEB3; width:13cm; height:5cm; font-family:Comic Sans MS; color:#05ff00; font-size:0.5cm; overflow:auto; padding:0.1cm 0.1cm 0.1cm
		0.5cm; border-style:ridge; border-width:7px 3px 7px 7px; border-color:#FFDAB9; position:relative; left:55px; top:-0.1cm;}
span.kansio{color:#00CED1; font-family:Comic Sans MS; font-size:0.4cm;}
p.alatiedot{color:#00AED1; position:relative; top:-23%; font-family:Comic Sans MS; font-size:0.5cm;}

tsuriga [29.08.2006 23:36:17]

#

Voi niitä edellisiä submittauksiakin muokkailla. Paljon on tavaraa näin pienen asian ympärille saatu. Kommentoinnin sisällytyksestä plussaa. CSS näyttää kauhialta hötöltä, voisi vähän siistiä. Ei ne rivinvaihdot kaistaa niin kummoisesti syö ja et kuitenkaan tiivistä sivun kuvausta samoin.

Kentti [30.08.2006 14:52:30]

#

Tuo CSS on nyt mitä on, vanha tapa laittaa tuolleen☺

tsuriga [30.08.2006 15:26:07]

#

Aumlitkin voi vaihtaa ääkkösiksi, tablet diveiksi ja mainita, notta toimii PHP:n versiosta 5 ylöspäin. rename palauttaa falsen mikäli uudelleennimeäminen epäonnistuu, joten siihen kyllä saa virheviestin ympättyä sillä if-lauseella, mikäli niin tahtoo.

EDIT: Strip_tags on ihan varteenotettava vaihtoehto käyttäjän syötteen parsimiseksi tosiaan, vaikka sitä ennen ihmettelinkin. Toinen vaihtoehto on ajaa syötteet htmlentities-funktion läpi.

Kentti [31.08.2006 19:31:47]

#

Laitoin nuo aumlit siks, ku ei aina toiminu oikein ilman, tuli joku ihmeellinen "vänkyrä" A.
strip_tag() on siks, jos joskus laittaa tän nettiin.

Tiedäkkö muuten, onko täällä ollu PHP:llä tämmöstä aiemmin (näiden meidän lisäks)?

tsuriga [01.09.2006 03:21:17]

#

Vänkyrät johtunevat väärästä charsetista. Input-tagitkin voisi sulkea, <input /> ;). Jos joku kaipaa pelkkää funkkaria niin mainostan tässä omaa versiotani, https://www.ohjelmointiputka.net/koodivinkit/24911-php-tiedostojen-uudelleennimeäjä

Kentti [01.09.2006 21:39:02]

#

tsuriga, tiedäkkö, miks meidän kummankaan funkkaria ei hyväksytä tuonne "päälistalle". Onko systeemissä joku fiba, vai eikö nämä vain kelpaa? :O

tsuriga [02.09.2006 03:56:12]

#

Niitä hyväksytään köntti kerrallaan ja aika epäsäännöllisin väliajoin.

Kentti [02.09.2006 08:22:07]

#

Ajattelin vain, kun tämänkin kohdan joosain kai näin

Ohjelmointiputka kirjoitti:

Ylläpito tarkistaa sen 0-2 päivän kuluessa, minkä jälkeen vinkki lisätään


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta