Autor Zpráva
iru
Profil
Zdravím,

potřebuji vytvořit adresář a do něho dva podadresáře:

$adresar_hlavni="katalog/".$obsah_katalog;
if (!is_dir($adresar_hlavni)) {
mkdir($adresar_hlavni, 0777);
}

$adresar_velke="katalog/".$obsah_katalog."/velke";
if (!is_dir($adresar_velke)) {
mkdir($adresar_velke, 0777);
}

$adresar_male="katalog/".$obsah_katalog."/male";
if (!is_dir($adresar_male)) {
mkdir($adresar_male, 0777);
}

jenže dojde jen k vytvoření prvního, práva se nenastaví na 0777 a nejdou už vytvořit ty podadresáře. Kdybych se teoreticky uskromnila a vystačila s tím prvním adresářem, bude problém stejně, protože se do něho budou uplouadovat soubory, takže stejně potřebuji mít u něj práva 0777.

Díky za každou radu.
DJ Miky
Profil
Možná by to šlo přes FTP fce.
Acci
Profil
To je náhoda, zrovna o tom píše R.H.: http://radekhulan.cz/item/jak-funguje-mkdir-chmod-v-php
Rellik
Profil
Já tořeším tak že po každé vytvořené složce jí nastavím práva... Takhle:

mkdir('../galery/'.$slozka, 0777 );
chmod('../galery/'.$slozka, 0777 );
mkdir('../galery/'.$slozka.'/nahledy', 0777 );
chmod('../galery/'.$slozka.'/nahledy', 0777 );

A funguje to. :)
iru
Profil
mezitím jsem to udělala jako Rellik, ale nejde mně tam uploadovat soubor:

move_uploaded_file($TMPjmeno, "katalog/$obsah_katalog/$foto") or die ('Při ukládání souboru nastala chyba.');

Warning: move_uploaded_file(): SAFE MODE Restriction in effect. The script whose uid is 2314 is not allowed to access

tak nevím...

dala jsem to do jednoho adresáře. Podadresáře mně nešly ani takhle vytvořit
Rellik
Profil
Já si sice jěště ukládám názvy do databáze ale třeba ti to pomůže. Tady je můj script na vytváření těch složek. (Bez formuláře).
<?php
if(isset($_POST['send'])){
$nazev = trim($_POST['nazev']);
$text = strtolower(substr($_POST['nazev'], 0, 4));
$slozka = strtr($text,"áčďéěíňóřšťúůýž ÁČĎÉĚÍŇÓŘŠŤÚŮÝŽ","acdeeinorstuuyz_acdeeinorstuuyz");
if(($nazev) != true){
echo "<span class='red'>Nebyl vyplněn název galerie!</span> ";
}
else{
$spojeni = mysql_connect($dbserver,$dblogin,$dbheslo ) or die ('<b>Critical error!</b><br>Nepodařilo se připojit k databázi!');
mysql_select_db($dbnazev, $spojeni) or die ();
$PocetStejnych=mysql_result(mysql_query("SELECT COUNT(*) FROM `galerie` WHERE `nazev`='$nazev' LIMIT 5;"),0);
if($PocetStejnych!=0){
echo "<span class='red'>Zadaná galerie už v systému existuje!!</span>! ";
}
else {
$vloz ="insert into galerie set nazev='$nazev', slozka='$slozka';";
$result=mysql_query($vloz) or die("Chyba! Galerii se nepodařilo vytvořit! ".mysql_error());
mkdir('../galery/'.$slozka, 0777 );//vytvorení složky
chmod('../galery/'.$slozka, 0777 );
mkdir('../galery/'.$slozka.'/nahledy', 0777 );
chmod('../galery/'.$slozka.'/nahledy', 0777 );
echo "<span class='red'>Galerie byla vytvořena. Můžete do ní přidat fotografie.</span>";
}
}
}
?>
Třeba ti to pomůže... :)
iru
Profil
Rellik nejde to, mám to vytváření adresáře stejně, ale podaří se mně vytvořit jen ten jeden adresář, má už dokonce práva 0777, ale jakmile chci podadresáře, tak na mě křičí zase SAFE MODE. Dokonce se dívám, že ty složky vytváříš o úroveň výš, to jsem původně také chtěla, ale to už vůbec nešla ani jedna vytvořit.

Dobře, dejme tomu, že jsem skromná a spokojím se s jedním adresářem, co se mě daří vytvořit, ale zůstává tu otázka, proč do něj nejde uploadnout soubor, když má práva 0777. Ve skriptu mám sled činností takhle: napřed testuju, zda adresář existuje, nebo ne. Když ne, tak se vytvoří a potom se uploadovaný soubor pomocí fce move_uploaded_file přesune do toho adresáře. (Měl by se přesunout, ale nepřesune)
Rellik
Profil
Upload mám takto:

if($vlozit)
{
if ($soubor == "")
{
echo '<span class="red">Nebyla zvolena žádná fotografie!</span> ';
}
if (chmod($soubor , 0777 ))
if ($soubor_type=='image/jpeg')
{
if (is_uploaded_file($soubor))
{
$cesta= '../galery/'.$slozka.'/'; //slozka je v korenovem adresari(pripadne zmenit cestu)
$velikost=getimagesize($soubor);
$sirka=$velikost[0];
$vyska=$velikost[1];

if ($soubor_size < 921600) //omezení velikosti obbrázku na 900Kb
{
if ($sirka <= 600)
{
if (move_uploaded_file ($soubor, $cesta.$soubor_name))
{
echo '<script type="text/javascript" for="window" event="onLoad()">';
echo '<!--
window.location.href="add_galery.php?upload=ok"';
echo '// --> </script>';
}
else echo "<span class='red'>Při nahrávání souboru došlo k neočekávané chybě! Zkuste to znovu prosím.</span><br><br>
"; //oznameni neocekavane chyby
}
else echo "<span class='red'>Velikost obrázku (".$sirka."x".$vyska.") překračuje povolenou mez! Zmenšete ho prosím pomocí nějakého editoru.</span><br><br>
"; //oznameni chyby při velkých rozměrech obrázku
}
else echo "<span class='red'>Fotografie je datově příliš velká!</span><br><br>
"; //vypis chyby pri obrazku vetsim jak 900Kb
}
} else echo "<span class='red'>Soubor není podporován!</span><br><br>
"; //vypis chyby pokud se uploaduje soubor ktery neni jpg

}
if ($upload == "ok") {
echo "<span class='red'>Fotografie byla úspěšně nahrána na server.</span><br><br> "; // oznameni o uspesnosti
}

Opět je to bez formuláře...
Je tam pár omezení navíc... Jinak pokračování příště... :) Teď du spát... ráno vstávám zase do práce... :(
iru
Profil
Tak jsem zkusila ještě jednu věc: vytvořila jsem adresář ručně v Total Commanderu a spustila skript. Vše proběhlo v pořádku.
Potom jsem nechala adresář vytvořit skriptem, ten se vytvořil, ale soubor už se do něj nepřesunul:

Warning: move_uploaded_file(): SAFE MODE Restriction in effect. The script whose uid is 2314 is not allowed to access www/psi_kocky/katalog/voditka owned by uid 600

takže si myslím, že část pro upload bude v pořádku, ale problém bude v tom adresáři. Když se kouknu v Total Commanderu na práva, tak má 0777. Tak nevím, co se tomu nelíbí...
Augard
Profil
Myslim ,ze se zaplim SAFE MODem to nejde, kdyz php vytvori adresar tak se u nej nastavi jine id aplikace(The script whose uid is 2314 is not allowed to access ) nez ke kteremu ma php pravo pristupovat, takze jedine funkcni reseni je asi vytvaret adresare pres ftp.
koudi
Profil
Ono je jedná o 'chybu', kterou se rozhodli (bohužel) neopravovat. Příkaz mkdir totiž (jak píše Augard) sice vytvoří adresář, ale j jiným uid, než normálně php používá, takže když je zaplý safe_mode, tak to logicky řve. Jak řikám, je to logická chyba, ale někde jsem četl, že 'After long discussion we've deciced not to change this behavior.'
karel
Profil *
Pokud je zapnutý safe mode, musíš použít pro vytvoření adresáře FTP funkce
Rellik
Profil
No s tim Safe_modem nevim... Ja mám stránky na WZ kde je zapnutý a normálně se mi adresáře tvoří (tím samým scriptem, který sem psal o pár příspěvků výš).
koudi
Profil
normálně se mi adresáře tvoří
Však oni se v pohodě vytvoří ... ale už se s nimi nedá pořádně pracovat.
Rellik
Profil
koudi
Co myslíš tím "pořádně pracovat"?
danoha
Profil *
Já vytvářím složky na WZ a jde to chyby to neháže
dělám to takhle:
mkdir("slozka", "0777");

normalně to maká.
nofate
Profil
Ten problem nebude v tom ze je zapnuty Safe Mode. Wz ho ma zapnuty a skusal sam tam spustit skript, ktory vytvori folder cez mkdir() s pravami 0777 a hned do neho presune uploadovany subor. Vsetko v poriadku, ziaden problem. A to je Safe Mode zapnuty!!!

Tak odbornici, cim to je ze sa objavuje hlaska:
"Warning: move_uploaded_file(): SAFE MODE Restriction in effect. The script whose uid is 2314 is not allowed to access..."
nofate
Profil
Ten problem nebude v tom ze je zapnuty Safe Mode. Wz ho ma zapnuty a skusal sam tam spustit skript, ktory vytvori folder cez mkdir() s pravami 0777 a hned do neho presune uploadovany subor. Vsetko v poriadku, ziaden problem. A to je Safe Mode zapnuty!!! tu je dokaz!!

Tak odbornici, cim to je ze sa objavuje hlaska:
"Warning: move_uploaded_file(): SAFE MODE Restriction in effect. The script whose uid is 2314 is not allowed to access..."
Augard
Profil
Ten problem je v zaplem safe mode, sm kontroluje vlastnika adresare, to nema nic spolecneho z pravama pristupu, problem je ve vytvoreni adresare u nej se natavi jiny vlastnik adresare nez na pri kterem bezi script, jedine reseni jak obejit omezeni je vytvaret adresar pres ftp.
nofate
Profil
a nevite nejakej navod jak vytvorit adresar pres FTP funkci (aby se dalo pak do vytvoreneho adresare uploadovad php scriptem). Divam ze v manualnu pro ftp funkce neni funkce pro vytvoreni adresare (kerou by sem tam ocekaval) ftp_mkdir() ... jenom ftp_rmdir pro smazani. Diky...
bukaj
Profil
nofate
díváme se do toho samého manuálu?
ftp_mkdir()
nofate
Profil
sorry, je tam
Toto téma je uzamčeno. Odpověď nelze zaslat.