Autor Zpráva
Ondra5678
Profil *
Našel jsem tady na fóru ten to script.
PHP skript umí zjistit název souboru ve složce, který má být vytvořen, má následovat podle čísla a do něho být zapsán obsah:
$max = 0;
foreach (new RegexIterator(new DirectoryIterator($dir = '/tmp/_test_'), '~^(\d+)\.php$~', RegexIterator::GET_MATCH) as $item) {
    if ($item> $max) $max = $item[1];
}
$max++; //o jedno vyšší než poslední
file_put_contents("$dir/$max.php", 'blah blah'); 

Šlo by to nějak udělat, aby to místo čísla vypsalo nějaký počet číslic s písmenama (a98bk41FO5K)?
Anonymní
Profil *
$nazov = md5($max);
$pocet = "8"; //pocet pismeniek+cisiel (8 = a98bk41F)
$nvm = strlen($nazov);
$nazov = substr($nazov, 0, -($nvm-$pocet));


asi tak :D
Ondra5678
Profil *
Díky moc. Ještě bych se chtěl zeptat jesli je to nějak ošetření, aby se soubor nevytřil stejnej a nepřepsal?
panther
Profil
Ondra5678:
tím, že je v [#2] použit začátek z nějakého hashe, nebál bych se toho. Pravděpodobnost, že by prvních osm znaků z hashů samotných čísel bylo stejných, je poměrně malá. Nevím, kolik budeš mít souborů (desítky, stovky, tisíce?), můžeš si jejich hashe vypsat, jestli se prvních 8 znaků náhodou neshoduje. Odhaduji, že ne.
Ondra5678
Profil *
Dejme tomu, že tak tisíce a dám na 10 znaků nebo 12 jěšte nevím. Právě že to přepsání nebo-li že se shodnou se bojím, aby pak nějakej soubor neměl jinej obsah.
Ondra5678
Profil *
Tědka jsem to zkoušel a mám to na formulář, kterej po vyplnění se zapíše a pořád mi to píše název (d41d8cd98f.php) když to dám vytvořit.
<form action="" method="post">
Jméno: <input type="text" name="jmeno" /> <br />
Povolání: <input type="text" name="povolani" /> <br />
<input type="submit" value="Odeslat" />
</form>

<?php
if(IsSet($_POST['jmeno']) AND IsSet($_POST['povolani']) AND !empty($_POST['jmeno']) AND !empty($_POST['povolani'])) //Pokud příjdou všechna data a nejsou prázdná
{
$nazov = md5($max);
$pocet = "10"; //pocet pismeniek+cisiel (8 = a98bk41F)
$nvm = strlen($nazov);
$nazov = substr($nazov, 0, -($nvm-$pocet));
$doSouboru = "$nazov.php"; //Název souboru, kam se data uloží
$obsah = "Jmenuji se ".$_POST['jmeno']." a pracuji jako ".$_POST['povolani']."."; //Př. Jmenuji se Jaroslav a pracuji jako dělník.
$vytvorit = file_put_contents($doSouboru, $obsah);


if($vytvorit) //Pokud se vytvoří
{
echo "Soubor byl v pořádku uložen!";
} else { //Pokud ovšem ne
die("Nastala chyba při ukládání! <a href=\"\">Zkusit znovu</a>.");
}
} else {
die("Musíte vyplnit všechny údaje! <a href=\"\">Zkusit znovu</a>.");
}
?>
Chro
Profil
Ondra5678:
Nebo použij jednoduché generování "abcd1234" názvu pro soubor:
$nazev_souboru = base_convert(microtime(TRUE), 10, 36);
Ondra5678
Profil *
Hlavně bych potřeboval, aby se to pokut možno neopakovalo.
xmark
Profil
Ondra5678:
Nevím přesně, o co ti jde, ale myslím, že skladovat informace tímto stylem je špatně.
Jestli chceš mít řádově tisíce položek, kde bude vždy jméno a profese, nauč se používat databázi. Jestli to neuděláš teď, budeš to potřebovat v budoucnu. A jestli toto bude ještě živý projekt, tak to na databázi stejně budeš převádět.
Nehledě na to, že spoléhat, že desetiznakový název se skoro určitě nemůže opakovat, je diletantismus.

Začni tady: http://www.linuxsoft.cz/article.php?id_article=336
Ondra5678
Profil *
xmark
Však já se jen zeptal o radu. Myslím, že odtoho je tady tohle fórum. Jestli myšlíš, že to je diletantismus, tak to teda nevím o čem tohle fórum .
xmark
Profil
Ondra5678:
Jen se ptej, já se s tebou nehádám. Jen ti radím, že na to jdeš špatně. A špatný postup tě stojí čas.
panther
Profil
Ondra5678:
ptej se, co hrdlo ráčí. To, co napsal xmark je rozumná připomínka - když ne pro tento okamžik, minimálně do budoucna. Nejde jen o skladování informací, ale práci s nimi - to se z toho pak zblázníš, až budeš potřebovat něco zpracovat. Ale co, bude to tvůj čas.
Ondra5678
Profil *
panther:
Však jo, právě proto se ptám, abych se z toho nezbláznil a taky nestrávil nad tím hodně času. Mě napadlo toto řešení, tak jsem se zeptal, když mě xmark poradil tím líp, protože asi o tom něco co ví a může mi poradit co a jak. Nemusí hnedka psát že je to diletantismus a stačí jen napsat co by bylo lepší řešení atd. Díky za rady.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: