vkladanie viacerých súborov cez include
vkladanie viacerých súborov cez include
čafte,
ako možem nastaviť funkciu include (PHP) tak, aby načítavalo všetky súbory v istom priečinku zostupne?
Pre bližšiu ukážku: mám tam súbory
text001.dat
text002.dat
text003.dat
text004.dat
text005.dat
a aby sa všetky vložili do stránky, ale v poradí:
text005.dat
text004.dat
text003.dat
text002.dat
text001.dat
ďk
ako možem nastaviť funkciu include (PHP) tak, aby načítavalo všetky súbory v istom priečinku zostupne?
Pre bližšiu ukážku: mám tam súbory
text001.dat
text002.dat
text003.dat
text004.dat
text005.dat
a aby sa všetky vložili do stránky, ale v poradí:
text005.dat
text004.dat
text003.dat
text002.dat
text001.dat
ďk
Možno viac zložitý skript, ako by si chcel (ak budeš chcieť, môžem ho zjednodušiť), ale môžeš mu dať ako parameter masku, podľa ktorej vyfiltruje požadované súbory (je to vhodné napr. ak v tom adresári sú aj iné súbory):
Kód: Vybrať všetko
<?php
function s2p($mask)
{
$translate = Array(
"." => "\\.",
"*" => ".*",
"?" => ".?",
"+" => "\\+",
"[" => "\\[",
"]" => "\\]",
"(" => "\\(",
")" => "\\)",
"{" => "\\{",
"}" => "\\}",
"^" => "\\^",
"\$" => "\\\$",
"\\" => "\\\\",
);
return "/^".strtr($mask, $translate)."$/";
}
function include_files($dir, $mask)
{
$mask = s2p($mask);
$files = array();
if (!preg_match("/\/$/", $dir)) {
$dir .= "/";
}
if (is_dir($dir)) {
if ($dh = opendir($dir)) {
while (($filename = readdir($dh)) !== false) {
if ($filename != "." && $filename != ".." && is_file($dir . $filename) && preg_match($mask, $filename))
$files[] = $dir . $filename;
}
closedir($dh);
}
}
rsort($files);
foreach ($files as $filename) {
include($filename);
}
}
include_files("files", "text*.txt");
?>a este nieco... ze tu mam skriptik na pocitanie:
a ono to zacne pocitat od jednociferneho cisla neak takto: "1" a pod.
A ked chcem aby to zacalo pocitat TROJCIFERNYM cislom neak takto: "001" a pod. da sa taqe neco? dakujem
Kód: Vybrať všetko
$handle = fopen("../files/number.dat","a");
fclose($handle);
$handle = fopen("../files/number.dat","r+");
$kolik = fread($handle,10);
++$kolik;
rewind($handle);
fwrite($handle,$kolik);
fclose($handle);A ked chcem aby to zacalo pocitat TROJCIFERNYM cislom neak takto: "001" a pod. da sa taqe neco? dakujem
To číslo 001 musíš mať v tom súbore number.dat, alebo stačí, keď bude v súbore v klasickom tvare a len pri použití tam budú tri medzery.
Ak by si chcel, aby to číslo bolo v tom tvare aj v tom súbore, bolo by to trochu zložitejšie (napr. ak by tam bolo číslo 012 php by si myslelo, že je to číslo v osmičkovej sústave).
Ak ti stačí, aby bol ten tvar pri používaní, použi funkciu sprintf. Napr.:
Ak by si chcel, aby to číslo bolo v tom tvare aj v tom súbore, bolo by to trochu zložitejšie (napr. ak by tam bolo číslo 012 php by si myslelo, že je to číslo v osmičkovej sústave).
Ak ti stačí, aby bol ten tvar pri používaní, použi funkciu sprintf. Napr.:
Kód: Vybrať všetko
$filename = sprintf("text%03d.txt", $kolik);no proste poviem to takto:
ja som mal hento "pocitadlo" na vytvaranie tych suborov text(cislo).txt aby sa mi subory neopakovali.
priklad:
text1.txt
text2.txt
...
text10.txt
a pod.
vsetko funguje, akurat nastal problem pri hromadnom include (ten co si sem dal aj ty), a to bralo cislo 10 v tomto pripade ako mensie nez 2 a vacsie nez 1. Preto som sa pytal na to pocitadlo. Dalo by sa to neak logicky vyriesit? dak.
PS: za ten hromadny include som uz k+ poslal :p
ja som mal hento "pocitadlo" na vytvaranie tych suborov text(cislo).txt aby sa mi subory neopakovali.
priklad:
text1.txt
text2.txt
...
text10.txt
a pod.
vsetko funguje, akurat nastal problem pri hromadnom include (ten co si sem dal aj ty), a to bralo cislo 10 v tomto pripade ako mensie nez 2 a vacsie nez 1. Preto som sa pytal na to pocitadlo. Dalo by sa to neak logicky vyriesit? dak.
PS: za ten hromadny include som uz k+ poslal :p
V podstate sú dva jednoduché spôsoby, ako to urobiť.
1. budeš generovať názvy tých súborov pomocou tej funkcie sprintf (a budeš tam mať čísla v tvare 001, 002...)
2. ak by tie názvy súborov mali číslo na začiatku (a nie v strede), tak by sa vo funkcii rsort dal použiť parameter SORT_NUMERIC (a fungovali by to ako potrebuješ)
Ďalšia možnosť je odstrihnúť začiatok reťazca a porovnávať len tie číselné časti (ale to by si musel upravovať vždy, keby si chcel zmeniť názvy tých súborov).
1. budeš generovať názvy tých súborov pomocou tej funkcie sprintf (a budeš tam mať čísla v tvare 001, 002...)
2. ak by tie názvy súborov mali číslo na začiatku (a nie v strede), tak by sa vo funkcii rsort dal použiť parameter SORT_NUMERIC (a fungovali by to ako potrebuješ)
Ďalšia možnosť je odstrihnúť začiatok reťazca a porovnávať len tie číselné časti (ale to by si musel upravovať vždy, keby si chcel zmeniť názvy tých súborov).
Vlastne sa to dá vyriešiť ešte aj inak. Nahraď ten príkaz rsort týmto: natsort($files);
$files = array_reverse($files);
$files = array_reverse($files);
A dalo by sa toto troska prerobit aby sa to neincludovalo, ale nacitalo do premennej?chrono napísal:Kód: Vybrať všetko
<?php function s2p($mask) { $translate = Array( "." => "\\.", "*" => ".*", "?" => ".?", "+" => "\\+", "[" => "\\[", "]" => "\\]", "(" => "\\(", ")" => "\\)", "{" => "\\{", "}" => "\\}", "^" => "\\^", "\$" => "\\\$", "\" => "\\\", ); return "/^".strtr($mask, $translate)."$/"; } function include_files($dir, $mask) { $mask = s2p($mask); $files = array(); if (!preg_match("/\/$/", $dir)) { $dir .= "/"; } if (is_dir($dir)) { if ($dh = opendir($dir)) { while (($filename = readdir($dh)) !== false) { if ($filename != "." && $filename != ".." && is_file($dir . $filename) && preg_match($mask, $filename)) $files[] = $dir . $filename; } closedir($dh); } } rsort($files); foreach ($files as $filename) { include($filename); } } include_files("files", "text*.txt"); ?>
Myslíš to, čo tu rieši geoge? http://www.hojko.com/nacitanie-do-array ... 72936.htmlMato.y napísal:RE: A dalo by sa toto troska prerobit aby sa to neincludovalo, ale nacitalo do premennej?
presne takchrono napísal:Ak by tam boli iba súbory, ktoré sa majú načítať a zároveň by boli číslované spojito (čo by ale znamenalo, že pri vymazaní nejakého súboru by sa to muselo celé prečíslovať), tak by to fungovalo.