Avaleht
uus teema   vasta Tarkvara »  WWW »  PHP upload - failiõigused märgi kõik teemad loetuks
märgi mitteloetuks
vaata eelmist teemat :: vaata järgmist teemat
Hinnavaatlus :: Foorum :: Uudised :: Ärifoorumid :: HV F1 ennustusvõistlus :: Pangalink :: Telekavad :: HV toote otsing
autor
sõnum Saada viide sõbrale.  :: Teata moderaatorile teata moderaatorile
otsing:  
mathiasm
HV vaatleja
mathiasm

liitunud: 06.05.2010




sõnum 23.05.2013 10:23:36 PHP upload - failiõigused vasta tsitaadiga

Tegin upload vormi: http://kobras.ee/upload - kõik toimib ilusti, kuid failid on serveris "0600" õigustega ning seetõttu ei saa neid veebiliidese kaudu vaadata
(ehk siis: uploadin akvaarium4.jpg, see liigutatakse kausta /failid ning kui sisestan URL-i http://kobras.ee/upload/failid/ , siis näen seal küll akvaarium4.jpg-d, kuid ei saa seda avada (kuna "others:read" õigus puudub)
Ma tahaks teada, kas seda on võimalik koodi muutmise teel parandada, või peaks veebiteenusepakkuja (ELION) kuidagi sekkuma?

Php-upload, mida kasutan, on tehtud täpselt selle näite eeskujul: http://www.w3schools.com/php/php_file_upload.asp

(seesama index.php fail töötab teise veebiserverisse (haldaja RADICENTER) kopeerituna hästi ning seal on failiõigused "0644", mistõttu on nende vaatamine brauseris võimalik)
Kommentaarid: 1 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 1
tagasi üles
vaata kasutaja infot saada privaatsõnum
andrusny
Kreisi kasutaja
andrusny

liitunud: 20.03.2006




sõnum 23.05.2013 10:32:00 vasta tsitaadiga

Võid proovida CHMOD muuta peale salvestust koodis
http://php.net/manual/en/function.chmod.php

_________________
Kommentaarid: 7 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 7
tagasi üles
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
mathiasm
HV vaatleja
mathiasm

liitunud: 06.05.2010




sõnum 23.05.2013 12:45:20 vasta tsitaadiga

andrusny kirjutas:
Võid proovida CHMOD muuta peale salvestust koodis
http://php.net/manual/en/function.chmod.php


Teoorias võiks see olla väga hea lahendus, kuid millegipärast ei tööta - õigused on endised pärast uploadimist

Kood on mul selline:
(chmod isegi kahes kohas kirjeldatud, kuskil ei toimi)
<?php

   $info = "";
   $allowedExts = array("gif", "jpeg", "jpg", "png", "zip", "rar", "doc", "docx", "ddoc", "ddocx", "txt", "pdf");
   $fileName = $_FILES['file']['name'];
   $extension = strtolower(end(explode(".", $fileName)));

   $fileType = $_FILES["file"]["type"];
   $fileSize = $_FILES['file']['size'];
   $fileTmp = $_FILES['file']['tmp_name'];

   if(!$fileName)

   {
      $error = 'Vali fail, mida soovid laadida!';

   }

   elseif(($fileType != "image/gif") && ($fileType != "image/jpeg") && ($fileType != "image/jpg") && ($fileType != "image/pjpeg") && ($fileType != "image/x-png") && ($fileType != "image/png") && ($fileType !="application/x-rar-compressed") && ($fileType !="application/octet-stream.zip") && ($fileType !="application/multipart/x-zip") && ($fileType !="application/zip") && ($fileType !="application/octet-stream") && (fileType != "application/msword") && ($fileType != "text/plain") && ($fileType !="application/pdf") && ($fileType !="application/x-pdf") && ($fileType !="application/acrobat") && ($fileType !="applications/vnd.pdf") && ($fileType !="text/pdf") && ($fileType !="text/x-pdf"))

   {
      $error = 'Keelatud faili tüüp!';
   }

   elseif(!in_array($extension, $allowedExts))
   {
      $error = 'Keelatud faili tüüp!';
   }
   elseif($fileSize > 200000000)
   {
      $error = 'Fail on lubatust suurem! (max 195,312 Kb)';
   }
   elseif(file_exists("failid/" . $fileName))
   {
      $error = 'Fail "'.$fileName.'" on juba serveris olemas!';
   }

   /** OPTIONAL */

   elseif($_FILES["file"]["error"])
   {
      $error = "Error: " . $_FILES["file"]["error"];
   }

   if($error == true)

   {
      echo $error;
   }

   else
   {
      $info .= "Nimi: " . $fileName . "<br />";
      $info .= "Tüüp: " . $fileType . "<br />";
      $info .= "Suurus: " . ($fileSize / 1024) . " kB <br />";
      $info .= "Talletan: " . $fileTmp . "<br />";

      echo "FAIL ON EDUKALT SERVERISSE LAETUD! <br /><br /> FAILI INFO: <br /> " . $info;

      chmod('failid/', 0644);

      move_uploaded_file($fileTmp, "failid/" . $fileName);

   }
chmod ($filename ,"0644")


   ?>
Kommentaarid: 1 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 1
tagasi üles
vaata kasutaja infot saada privaatsõnum
napoleon
Unknown virus
napoleon

liitunud: 08.12.2008



Autoriseeritud ID-kaardiga

sõnum 23.05.2013 13:32:16 vasta tsitaadiga

viimane chmod peaks vist olema chmod ("failid/" . $filename ,"0644")
Kommentaarid: 77 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 60
tagasi üles
vaata kasutaja infot saada privaatsõnum
andrusny
Kreisi kasutaja
andrusny

liitunud: 20.03.2006




sõnum 23.05.2013 15:15:33 vasta tsitaadiga

Ja kaust kallal pole üldse vaja näppida, sa ju hiljem ei muuda seda chmod väiksemaks, siis igakord pole vaja üle käia.
tsitaat:
viimane chmod peaks vist olema chmod ("failid/" . $filename ,"0644")

ja kui see ka ei aita, mine vaata, kas sul ftp s lastakse failiõigusi muuta? Siis võid seda katsetada
http://php.net/manual/en/function.ftp-chmod.php


Kas teenusepakkuja midagi .htaccess faili ei saa kirjutada, et selliselt käitub server? Vaata see üle.

_________________
Kommentaarid: 7 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 7
tagasi üles
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
napoleon
Unknown virus
napoleon

liitunud: 08.12.2008



Autoriseeritud ID-kaardiga

sõnum 23.05.2013 15:24:24 vasta tsitaadiga

Tegelikult käitub teenusepakkuja server täiesti korrektselt. Temp failides võib igasugust huvitavat infot olla ja eriti shared hostingu puhul pole see teps mitte hea kui üks kasutaja teise kasutaja temp faile saab näppida.
Kommentaarid: 77 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 60
tagasi üles
vaata kasutaja infot saada privaatsõnum
andrusny
Kreisi kasutaja
andrusny

liitunud: 20.03.2006




sõnum 23.05.2013 15:33:40 vasta tsitaadiga

Kas sain valesti aru? Ma sain aru, et ta ei saa vaadata juba üleslaetud pilte mitte temp kausta / temp faile .
_________________
Kommentaarid: 7 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 7
tagasi üles
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
napoleon
Unknown virus
napoleon

liitunud: 08.12.2008



Autoriseeritud ID-kaardiga

sõnum 23.05.2013 16:01:54 vasta tsitaadiga

Just, aga kui ta liigutas faili temp kaustast mujale ja õigusi ei muutnud, siis jäid ikka samad õigused mis seal temp kaustas olid.
Kommentaarid: 77 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 60
tagasi üles
vaata kasutaja infot saada privaatsõnum
mathiasm
HV vaatleja
mathiasm

liitunud: 06.05.2010




sõnum 24.05.2013 10:11:35 vasta tsitaadiga

napoleon kirjutas:
viimane chmod peaks vist olema chmod ("failid/" . $filename ,"0644")


Kui ma sellist kuju proovisin, juhtus järgnev: failid kaust muutus ligipääsmatuks ning uploader ei suutnud sinna enam faile kopeerida. Ka veebi kaudu ei saanud ligi. FTP kliendis olid kaustaõigused justkui OK, kaust aga näiliselt tühi; tegelikult oli seal sees .htaccess fail (Options +Indexes sisuga), seetõttu ei saa kausta kustutada ka. Proovisin skripti uues kaustas ja juhtus sama.

tsitaat:
ja kui see ka ei aita, mine vaata, kas sul ftp s lastakse failiõigusi muuta? Siis võid seda katsetada
http://php.net/manual/en/function.ftp-chmod.php


See idee tundub tore - proovisin, vist TOIMIKS, aga kus/kuidas ma oma FTP logimisandmed (server, username, password) annan, kas sellessamas koodis muutujate $ftp_server, $ftp_user_name, $ftp_user_pass asemel, nagu järgnevas näites? Proovisin, millegipärast tulemuseks "could not chmod", kuid vähemalt failinimi on õige, millel õigusi muutma peaks.

<?php
$file = "failid/" . $fileName;

// set up basic connection
$conn_id = ftp_connect(la01.neti.ee);

// login with username and password
$login_result = ftp_login($conn_id, minukasutajanimi, minuparool);

// try to chmod $file to 644
if (ftp_chmod($conn_id, 0644, $file) !== false) {
echo "$file chmoded successfully to 644\n";
} else {
echo "could not chmod $file\n";
}

// close the connection
ftp_close($conn_id);
?>

NB: Käsitsi FTP-cliendi kaudu failiõiguste muutmine toimib!
Kommentaarid: 1 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 1
tagasi üles
vaata kasutaja infot saada privaatsõnum
napoleon
Unknown virus
napoleon

liitunud: 08.12.2008



Autoriseeritud ID-kaardiga

sõnum 24.05.2013 10:40:38 vasta tsitaadiga

Njaah, arenduse ajal on kasulik error reporting notice peale lülitada, siis oleksid selle näpuka avastanud. Muutujate nimed on case sensitive, seega õige oleks:
chmod ("failid/" . $fileName ,"0644")
aga kui juba kataloogi õigused sinnasamusesse keerasid, proovi koodist, ehk saad nii korda:
chmod ("failid/","0755")
Kommentaarid: 77 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 60
tagasi üles
vaata kasutaja infot saada privaatsõnum
mathiasm
HV vaatleja
mathiasm

liitunud: 06.05.2010




sõnum 24.05.2013 10:50:00 vasta tsitaadiga

napoleon kirjutas:
Njaah, arenduse ajal on kasulik error reporting notice peale lülitada, siis oleksid selle näpuka avastanud. Muutujate nimed on case sensitive, seega õige oleks:
chmod ("failid/" . $fileName ,"0644")
aga kui juba kataloogi õigused sinnasamusesse keerasid, proovi koodist, ehk saad nii korda:
chmod ("failid/","0755")


Aitäh tähelepanu juhtimast, aga vaatasin koodi üle - mul ongi igal pool see $fileName suur N-ga;
Muud "chmodid" olen praeguseks koodist eemaldanud, on ainult see FTP-kaudu muutev skript on hetkel see, mille loodaks käima saada.
Kommentaarid: 1 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 1
tagasi üles
vaata kasutaja infot saada privaatsõnum
napoleon
Unknown virus
napoleon

liitunud: 08.12.2008



Autoriseeritud ID-kaardiga

sõnum 24.05.2013 10:55:10 vasta tsitaadiga

Proovi ilma ftp-ta, tee lihtsalt selline php fail
php:
  1. <?php
  2. chmod ("failid/","0755");
  3. ?>


kui sa ownerit ei torkinud, peaks selle skripti ühekordne käivitamine asja korda tegema
Kommentaarid: 77 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 60
tagasi üles
vaata kasutaja infot saada privaatsõnum
mathiasm
HV vaatleja
mathiasm

liitunud: 06.05.2010




sõnum 04.06.2013 13:50:29 vasta tsitaadiga

napoleon kirjutas:
Proovi ilma ftp-ta, tee lihtsalt selline php fail
php:
  1. <?php
  2. chmod ("failid/","0755");
  3. ?>


kui sa ownerit ei torkinud, peaks selle skripti ühekordne käivitamine asja korda tegema


Oeh.. Panin käsu käima. Tulemus: Kausta chmod-iks saab 0000, kustutada enam ftp kaudu ei lase ja kausta sisu ei saa vaadata samuti (brauseris pole õigusi, ftp-kaudu näitab, et kaust tühi); failiõigusi ei saa ka ftp kaudu vahetada (järelikult ownership läinud?) - igatahes kaos.
Kuidas ma selle asja tööle saaks? Kuidas saab üks nii elementaarne asi nii võimatu olla?
Kommentaarid: 1 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 1
tagasi üles
vaata kasutaja infot saada privaatsõnum
andrusny
Kreisi kasutaja
andrusny

liitunud: 20.03.2006




sõnum 04.06.2013 20:57:01 vasta tsitaadiga

tsitaat:
<?php
chmod ("failid/","0755");
?>


ära ole teiste antud koodis nii kinni, mine loe php manuali.

chmod antakse ette numbrina mitte stringina

chmod("failid/", 0755);


Küllap string loetakse nulliks ja saidki chmod 000 kaustale.
Lase õigesti kirjutatud kood php s käima, muudab kausta õigeks.
Või kas see ongi selliselt üldse enam võimalik, kuna chmod on 000 ? Faili/kausta omanikul (st. php koodil) puudub ju ka igasugune õigus seda muuta nüüd.

väljavõte php manualist siis

tsitaat:
<?php
chmod("/somedir/somefile", 755); // decimal; probably incorrect
chmod("/somedir/somefile", "u+rwx,go+rx"); // string; incorrect
chmod("/somedir/somefile", 0755); // octal; correct value of mode
?>


ma kahjuks ei pannud ka ennem tähele seda, juba esimeses vastuses oli viga sees.

Edit...
vaatan, et see esimene vigane kood ongi su enda tehtud ja teised kopeerivad ei pane ka tähele.

Veidi teemast mööda ka siis, olen ise ka kokku puutunud sellega, et kui lasta koodil kaustu või faile teha ja talle piisavalt õigusi ei anna, siis ftp ga ligi ei lase, kuidas seda probleemi lahendada? Kas ainult koodiga õigusi muutes või saab ikkagi kuidagi ka läbi ftp või admin paneeli?
Näiteks teevad paljud cms selliseid kaustu, mida hiljem ei saa kustutada läbi ftp

Uurisin siis väheke teemat. Kui sul on se kaust/fail lukus ja ftp kaudu ligi ei saa, siis lähed Direct Admin kaudu File Manager ja seal teed selle Kausta/failile Reset Owner, peale seda saad juba asju muuta läbi ftp või ka sealt samast filemanager´ist.

_________________
Kommentaarid: 7 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 7
tagasi üles
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
mathiasm
HV vaatleja
mathiasm

liitunud: 06.05.2010




sõnum 05.06.2013 09:51:06 vasta tsitaadiga

Aitäh Sulle kogu selgitava teksti ja jutumärkidele tähelepanu juhtimise eest - nüüd enam tõesti ei keera kaustaõigusi nässu, kuid kausta sees olevaid faile kahjuks ikka ei näe, kuna tundub, et need õigused antakse ainult kaustale, mitte rekursiivselt seal sees olevatele failidele. Huvitav, kas seda saaks kuidagi force'da?
Kommentaarid: 1 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 1
tagasi üles
vaata kasutaja infot saada privaatsõnum
tiitise
HV kasutaja

liitunud: 04.03.2005



Autoriseeritud ID-kaardiga

sõnum 05.06.2013 10:18:39 vasta tsitaadiga

mathiasm kirjutas:
Aitäh Sulle kogu selgitava teksti ja jutumärkidele tähelepanu juhtimise eest - nüüd enam tõesti ei keera kaustaõigusi nässu, kuid kausta sees olevaid faile kahjuks ikka ei näe, kuna tundub, et need õigused antakse ainult kaustale, mitte rekursiivselt seal sees olevatele failidele. Huvitav, kas seda saaks kuidagi force'da?

Üks võimalus oleks kausta all olevad failid läbi skännida ja kõigile õigused anda.
Teine võimalus oleks kasutada system käsku -> system("chmod -R 755 /kausta/asukoht/");
Kommentaarid: 6 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 6
tagasi üles
vaata kasutaja infot saada privaatsõnum
mathiasm
HV vaatleja
mathiasm

liitunud: 06.05.2010




sõnum 05.06.2013 11:19:13 vasta tsitaadiga

EDIT:
tsitaat:

Üks võimalus oleks kausta all olevad failid läbi skännida ja kõigile õigused anda.
Teine võimalus oleks kasutada system käsku -> system("chmod -R 755 /kausta/asukoht/");

Proovin kohe system-käsku!
Kuidas muidu seda "esimest võimalust" praktikas rakendada?

EDIT2: lõpuks ometi töötab! Suur aitäh! system("chmod -R 755 ./failid/"); ja kõik toimib!
Kommentaarid: 1 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 1
tagasi üles
vaata kasutaja infot saada privaatsõnum
tiitise
HV kasutaja

liitunud: 04.03.2005



Autoriseeritud ID-kaardiga

sõnum 05.06.2013 13:31:44 vasta tsitaadiga

Juhul kui keegi ei taha süstem käsku kasutada siis saab ka sellise funktsiooniga hakkama:
php:
  1.  
  2. function chmodr($path, $filemode) {
  3.     if (!is_dir($path))
  4.         return chmod($path, $filemode);
  5.  
  6.     $dh = opendir($path);
  7.     while (($file = readdir($dh)) !== false) {
  8.         if($file != '.' && $file != '..') {
  9.             $fullpath = $path.'/'.$file;
  10.             if(is_link($fullpath))
  11.                 return FALSE;
  12.             elseif(!is_dir($fullpath) && !chmod($fullpath, $filemode))
  13.                     return FALSE;
  14.             elseif(!chmodr($fullpath, $filemode))
  15.                 return FALSE;
  16.         }
  17.     }
  18.  
  19.     closedir($dh);
  20.  
  21.     if(chmod($path, $filemode))
  22.         return TRUE;
  23.     else
  24.         return FALSE;
  25. }
  26.  
Kommentaarid: 6 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 6
tagasi üles
vaata kasutaja infot saada privaatsõnum
näita postitusi alates eelmisest:   
uus teema   vasta Tarkvara »  WWW »  PHP upload - failiõigused
[vaata eelmist teemat] [vaata järgmist teemat]
 lisa lemmikuks
näita foorumit:  
 ignoreeri teemat 
sa ei või postitada uusi teemasid siia foorumisse
sa ei või vastata selle foorumi teemadele
sa ei või muuta oma postitusi selles foorumis
sa ei või kustutada oma postitusi selles foorumis
sa ei või vastata küsitlustele selles foorumis
sa ei saa lisada manuseid selles foorumis
sa võid manuseid alla laadida selles foorumis



Hinnavaatlus ei vastuta foorumis tehtud postituste eest.