[Risolto] Fallimento upload

Salve.

Vi illustro il mio nuovo problema.

Ho una pagina php/html con una form che contiene un campo di input di tipo file dal quale caricherò le mie immagini.

Ora: in locale mi funziona tutto perfettamente, mentre in remoto no!

Questo penso dipenda dai settaggi nel file php.ini remoto, oppure dal fatto che il server è in safe mode.

Mi piacerebbe sapere qualche vostro parere per poter affrontare la cosa in modo chiaro e comunque per sapere cosa chiedere di preciso all'amministratore del server host(nel caso).

Spero di esser stato chiaro.

Attendo.....

 

inviato 6 anni fa
Schiappa
modificato 6 anni fa
Mario Santagiuliana
X 0 X

Dimenticavo.....

Ho scritto all'assistenza chiedendo di settare i permessi delle cartelle in questione(dove andranno le immagini)....

risposto 6 anni fa
Schiappa
X 0 X

Errori, log non ne hai preso visione?

Non possiamo aiutarti facilmente se non porti altri elementi sul problema...

risposto 6 anni fa
Mario Santagiuliana
X 0 X

Scusa.....sono una schiappa....

Gli errori che mi restituisce sono:

Warning: move_uploaded_file(../../images/catalogo/grandi/guanciale.jpg) [function.move-uploaded-file]: failed to open stream: Permission denied in /home/www/web72/web/shop/admin/Server/inserimento.php  on line 55

Warning: move_uploaded_file() [function.move-uploaded-file]: Unable to move '/home/www/web72/phptmp/phpGQdq70' to '../../images/catalogo/grandi/guanciale.jpg' in /home/www/web72/web/shop/admin/Server/inserimento.php on line 55

Warning: imagecreatefromjpeg() [function.imagecreatefromjpeg]: Unable to access ../../images/catalogo/grandi/guanciale.jpg in /home/www/web72/web/shop/admin/Server/inserimento.php on line 58

Warning: imagecreatefromjpeg(../../images/catalogo/grandi/guanciale.jpg) [function.imagecreatefromjpeg]: failed to open stream: No such file or directory in /home/www/web72/web/shop/admin/Server/inserimento.php on line 58

Warning: imagecopyresized(): supplied argument is not a valid Image resource in /home/www/web72/web/shop/admin/Server/inserimento.php on line 59

Warning: imagejpeg() [function.imagejpeg]: Unable to open '../../images/catalogo/piccole/guanciale.jpg' for writing: Permission denied in /home/www/web72/web/shop/admin/Server/inserimento.php on line 63

Tra l'altro mi ha contattato l'assistenza dicendomi che i permessi sono settati in modo corretto....visti gli errori...a me non pare....

I permessi che hanno attribuito alle cartelle sono:

drwxrwxr-x

Massima dimenzione nel file php.ini...:

;Maximum allowed size for uploaded files.

upload_max_filesize = 10M

Se servono altre info, basta chiedere.

Grazie in anticipo!

risposto 6 anni fa
Schiappa
X 0 X

Controlla che i path siano corretti.

Probabilmente tenti di salvare il file in una directory che non è quella con i permessi giusti.

Ciao

risposto 6 anni fa
Mario Santagiuliana
X 0 X

Ma io non uso collegamenti assoluti....

risposto 6 anni fa
Schiappa
X 0 X

E' indifferente, controlla che i tuoi path, anche se relativi, puntino alle directory corrette.

risposto 6 anni fa
Mario Santagiuliana
X 0 X

I path sono corretti. Oltretutto ho provato a sostituire i collegamenti relativi che utilizzavo con quelli assoluti(forniti dall'assistenza).....

risposto 6 anni fa
Schiappa
X 0 X

Il warning mi sembra chiaro, dice che non è permesso fare l'operazione che richiedi.

O i path sono sbagliati, o i permessi sono sbagliati o c'è un errore nel codice.

Puoi darci la parte del codice ineteressata nell'avviso?

risposto 6 anni fa
Mario Santagiuliana
X 0 X
                do {
         // Ottengo le informazioni sull'immagine
         list($width, $height, $type, $attr) = getimagesize($_FILES['image']['tmp_name']);
         // Sposto il file nella cartella da me desiderata
         move_uploaded_file($_FILES['image']['tmp_name'], '../../images/catalogo/grandi/'.$_FILES['image']['name']);
         // Creo la versione 120*90 dell'immagine (thumbnail)
         $thumb = imagecreatetruecolor(120, 90);
         $source = imagecreatefromjpeg('../../images/catalogo/grandi/'.$_FILES['image']['name']);
         imagecopyresized($thumb, $source, 0, 0, 0, 0, 120, 90, $width, $height);
         
         // Salvo l'immagine ridimensionata
         $pathTumb='../../images/catalogo/piccole/'.$_FILES['image']['name'];
         imagejpeg($thumb, "$pathTumb" , 85);
         
         $path=$_FILES['image']['name'];
         
         $query="INSERT INTO `prodotto` ( `nome` , `descrizione` , `consigli` , `prezzo` , `categoria` , `quantitaMin` , `immagine` , `immagineTumb` ) VALUES ( '$r[1]' , '$r[2]', '$r[3]', '$r[4]', '$r[6]', '$r[5]', '$path' , '$path')";
         $result = mysql_query($query,$db);
         $idProdotto=mysql_insert_id($db);
            
         $targetUrl = '../operazione-riuscita.php';
      } while (false);

Ripeto: in locale mi va!

risposto 6 anni fa
Schiappa
X 0 X

Ricontrolla i permessi dunque...

risposto 6 anni fa
Mario Santagiuliana
X 0 X

Allora:

i permessi sono settati a rwxrwxr-x. Quindi l'utente generico o anonimo non ha la possibilità di scrivere su quelle cartelle (other di ugo=r-x).

Allora l'unica cosa che mi petrebbe venire in mente è che l'"utente" che cerca di scrivere sulle cartelle faccia parte degli "other".

Ora: come faccio a settare le caratteristiche dell'utente in modo da farlo appartenere ad un certo gruppo? Come e dove si identifica l'utente nel server? Posso addirittura fare un login sulla pagina web e utilizzare i dati immessi come identificativi sul sistema operativo?

spero d'esser stato chiaro.

ciao

risposto 6 anni fa
Schiappa
X 0 X

Forse dovrei optare per un'autentificazione kerberos? E' possibile impostarla senza grosse complicazioni sul server remoto(ovviamente dall'interno!)?

Su wikipedia ho trovato questo codice:

<?php
// Sample authentication module for GSSAPI
// By Giuseppe Paternò <gpaterno@gpaterno.com>

$krbuser=getenv("REMOTE_USER");
echo "<h3>Autenticazione utente kerberos<br>$krbuser</h3><br>";
$ds=ldap_connect("ldaps://ldap.azienda.it/"); 

if ($ds) {
   // Bind and search for Given Name and uid
   $r=ldap_bind($ds);  
   $sr_user=ldap_search($ds, "ou=People, dc=azienda,dc=it", "krb5PrincipalName=$krbuser"); 

   if (ldap_count_entries($ds, $sr_user)>1) {
       echo "Error, too many entries with the same user $krbuser<br>";
   }

   $info = ldap_get_entries($ds, $sr_user);
   $givenname = $info[0]["givenname"][0];
   $uid = $info[0]["uid"][0];

   // Print out welcome message
   echo "Ciao $givenname!<br><br>";

   // Search for groups in which we are members
   $sr_group=ldap_search($ds, "ou=Group,dc=azienda,dc=it", "memberUid=$uid");

   if (ldap_count_entries($ds, $sr_group) == 0) {
       echo "L'utente $uid non fa parte di nessun gruppo.<br>";
   } else{
      $group_info = ldap_get_entries($ds, $sr_group);
      echo "Fai parte dei seguenti gruppi:<br>";
      for ($i=0; $i<$group_info["count"]; $i++) {
         echo "Gruppo <b>" . $group_info[$i]["cn"][0] . "</b> (gid=" .  $group_info[$i]["gidnumber"][0] . ")<br>"; 
      }
      echo "<br><br>";
      echo "Qui verrà creata la sessione PHP e ti verranno concesse le autorizzazioni appropriate.<br>";
      // Create session here for further access: profile user and
      // give permissions to data.
   }

   ldap_close($ds);

} else {
   echo "<h4>Unable to connect to LDAP server</h4>";
}
?>

ciao

risposto 6 anni fa
Schiappa
X 0 X

Ti stai confondendo un po' le idee.

Lascia a perdere l'autenticazione kerberos (devi configurare il server per questo, non so che tipo di piano hosting tu abbia ma non è necessaria questa cosa):

Colui che va a scrivere nella cartella è apache. Non devi autenticare dunque nessuno affinchè tu possa scrivere in tale cartella. Devi fare in modo che apache abbia i permessi di scrivere li. Tali permessi mi sembrano adeguati (se riferiti ad un sistema unix). Il problema può insorgere nel caso il tuo server abbia selinux attivato o se l'proprietario/gruppo di apache non è proprietario o non appartiene al gruppo della directory in cui vuoi scrivere.

Il tuo hosting provider ha detto che però è tutto in regola per la questione dei permessi. Io dunque direi che il problema è delle path sbagliate ma solo tu puoi esserne sicuro di questo. Fa delle prove con delle path assolute.

risposto 6 anni fa
Mario Santagiuliana
X 0 X

Ciao.

Scusate per la latenza.

Dopo una mia segnalazione il provider ha impostato i permessi da 775 a 766 e ovviamente non funzionava nulla(non caricava neanche le immagini messe "a mano" per ftp, al contrario di prima); "ovviamente" perché se togli il permesso di esecuzione le immagini non possono essere caricate da apache che a questo punto è scontato dire che faceva parte degli "altri".

Arrivati a questo punto ha configurato apache come proprietario, ma niente!

Quindi gli ho proposto di mettere i permessi a 777 per vedere se dipendeva veramente da questi; fatto ciò funzionava tutto.

Sinceramente non riesco a spiegarmi perché apache, pur essendo configurato come proprietario della cartella, non riesca a fare il suo lavoro.

Ora che le operazioni richieste vanno a buon fine, rimane il problema della sicurezza!

Anche se sarebbe competenza del provider risolvere il problema, vi sarei grato se riusciste a darmi qualche dritta sulla causa del malfunzionamento e sulla risoluzione di tale caso.

Grazie mille!

risposto 6 anni fa
Schiappa
X 0 X

Chi ti offre lo spazio web dovrebbe avere le competenze necessarie per risolvere questo inconveniente.

Le variabili in gioco sono tante, si tratta di un sistema stile unix di conseguenza guarderei bene il proprietario e il gruppo del file, poi passo a capire come è impostato apache e se rientra nel gruppo del file in questione. Prenderei anche in esame l'eventuale mal configurazione di apache. Infine se è attivo SELinux controllerei anche questo.

Ci sono troppi pochi elementi per dare una soluzione precisa.

risposto 6 anni fa
Mario Santagiuliana
X 0 X

Mi ha risposto il provider e mi ha messo davanti un bivio: dare i permessi all'utente ftp o darli a apache. Praticamente lui voule mettere proprietario uno dei due e quindi dare i permessi solo a questo...

...mma...non capisco: non si potrebbe farli appartenere entrambi ad un gruppo e dare i permessi a questo?!

va bé..

Vi faccio sapere.

risposto 6 anni fa
Schiappa
X 0 X
...mma...non capisco: non si potrebbe farli appartenere entrambi ad un gruppo e dare i permessi a questo?!

Si, sarebbe una scelta corretta...

Dipende dalle esigenze del provider e dalle scelta di sicurezza che si vogliono fare...io comunque metterei il proprietario e il gruppo mio personale ai file. Il server apache poi apparterrà anche al gruppo del mio utente e il problema si semi risolve così...

Ripeto però che tutto dipende da come si vuole configurare l'intero server.

risposto 6 anni fa
Mario Santagiuliana
X 0 X

Finalmente funziona tutto perfettamente!

E' stato impostato il gruppo che permette di agire sia via ftp, sia via php-upload.

Grazie super Mario! Sei sempre disponibile!

A presto

risposto 6 anni fa
Schiappa
X 0 X

Di niente.

 :bye:

risposto 6 anni fa
Mario Santagiuliana
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda