Práva u adresářů a souborů
Problémje, že mkdir 0777 ve skutečnosti nedělá v PHP mkdir 0777. Bere totiž do úvahy i systémovou masku, která je typicky nastavená pro *nixové uživatele na 0022, takže udělá pouhé 0755. A v php.ini ani v httpd.conf se to bohužel nedá změnit. Pokud tuto triviální informaci víte, vše je jasné, já jsem ji do dnešního dne nevěděl. Je tedy nutné před mkdir() použít ještě umask(0000), tedy vynulovat masku, a vše bude fungovat dle očekávání.
Druhou možností je samozřejmě nastavit defaultní umask v *nixovém systému na 0000. Poté i PHP bude fungovat tak, jak očekáváte, a nebude problém v syncu práv mezi PHP a FTP. Je to nakonec nejlepší řešení, protože spousta skriptů umask nepoužívá, a dopisovat to do skriptů je poněkud méně pohodlné. Navíc umask funguje jen pro nejbližší další příkaz, poté se opět resetuje do původního stavu, takže se nedá vložit jen do nějakého config.php.
Nahrátí souboru na server pomocí APP/admin/class.img.php
<form method="post" enctype="multipart/form-data" name="formular" id="formular">
<input type="file" name="soubor[]" value="Nahrát" />
</form>
zpracování
$fileAllow=array("doc","xls","pdf","odt","docx","xlsx");
saveFiles($fileArray,"data/upload","moje-id",356000,$fileAllow)
Download modul
např.v administraci na Synapse (je tu jen ukázka)
$directoryToUpload="../files";
$directoryToView="../data/cv";
$table="synapse_studenti";
if ($_REQUEST["action"]=="delete") {
$sqlPom="SELECT directory,file FROM $table WHERE id='".$_REQUEST["idr"]."' ";
$dotazPom=mysql_query($sqlPom);
$filePom=mysql_result($dotazPom,0,"file");
$sqlDel="DELETE FROM $table WHERE id='".$_REQUEST["idr"]."' ";
$dotazDel=mysql_query($sqlDel);
$file=$directoryToUpload."/".$filePom;
if (@file_exists($file)) {
$delete = @chmod ($file, 0775);
$delete = @unlink($file);
if ($delete) {
$message.="došlo k úspěšnému výmazu souboru ze serveru (<strong>$file</strong>) ";
}
//$delete = @system("del $filesys");
}
}
if (isset($_FILES["fieldsFile"])) {
$message = "";
$filePom = $_FILES["fieldsFile"];
if ($filePom["error"] != 0) {
$message = "Nastala chyba při uploadu souboru, zkontrolujte zda je soubor správný a cesta k němu existuje";
} else {
$uploadfile = $directoryToUpload."/".$filePom["name"];
$fileSize=$filePom["size"];
$message.="Dochází k nahrátí souboru : <strong>".$uploadfile."</strong> ($fileSize b). ";
if (!move_uploaded_file($filePom['tmp_name'], $uploadfile)) {
$message.="došlo k chybě při nahrátí souboru na serveru";
}
else {
$message.="soubor byl úspěšně nahrán na server";
if (file_exists($uploadfile)) {
$fileStat=stat($uploadfile);
$sizeOfFile=$fileStat["size"];
$mtime=date("d.m.Y",$fileStat["mtime"]);
$typeOfFile=typeOfFile($uploadfile);
}
}
}
if ($_REQUEST["fieldID"]>0) $fieldID=$_REQUEST["fieldID"];
else $fieldID="";
if (!$fieldID OR $fieldID==0 OR strlen($fieldID<1)) {
$sqlPom="SELECT MAX(id) FROM $table ";
$dotazPom=mysql_query($sqlPom);
$idMax=mysql_result($dotazPom,0,0)+1;
} else $idMax=$fieldID;
$fieldActive=$_REQUEST["fieldActive"];
$fieldTitle1=$_REQUEST["fieldTitle1"];
$fieldTitle2=$_REQUEST["fieldTitle2"];
$fieldTitle3=$_REQUEST["fieldTitle3"];
$fieldOrder=$_REQUEST["fieldOrder"];
//$fileName=$directoryToView."/".$filePom["name"];
$sqlInsert="REPLACE INTO $table VALUES (
'$idMax','$directoryToView', '".$filePom["name"]."','$fieldTitle1','$fieldTitle2'
,'$fieldTitle3', '$fieldActive', '$fieldOrder','$sizeOfFile','$mtime'
,'$typeOfFile','','','',''
) ";
//echo $sqlInsert;
if ($queryInsert=mysql_query($sqlInsert)) {
$message.="<strong>$fieldTitle1</strong> byl úspěšně vložen do databáze.";
}
else { $message.="nastala chyba při vkládání záznamu <strong>$fieldTitle1</strong> do databáze."; $message.=mysql_error(); }
//echo phpinfo();
}