Ciao a tutti, sono ancora qui a chiedervi un parere.
Allora, ho un hosting windows su cui sto cercando di far girare un applicativo stupido fatto da me.
In pratica devo caricare dei file pdf, che poi devono essere visualizzati da un frontend.
Questi pdf hanno una descrizione e dei dati accessori che vengono salvati su un db mysql.
Fino all'insert della riga su db nessun problema; sulla tabella salvo il nome del file, alcuni dati accessori e il pdf lo sposto in una cartella (la famigerata public).
Il problema si pone quando devo fare una modifica: non riesco a sovrascrivere il file!.
A questo punto, quindi, ho pensato di fare uno script che verifichi l'esistenza del file, se lo trova lo cancella e quindi carichi il file con quel nome.
Il tutto funziona (mi rendo conto che é contorto, ma non ho trovato altra soluzione...).
Ho fatto delle prove su una riga nuova e tutto funzionava perfettamente.
Quindi ho messo in produzione lo script, e.... non funziona!
lo posto:
Codice PHP:
<?php
include("include/php/connect_db.php");
$id=$_POST["id"];
$file = $_POST['file'];
$file2 = $_POST['file2'];
#prelevo dati
$allegato = $_FILES['file']['name'];
$file_tipo = $_FILES['file']['type'];
$file_temp = $_FILES['file']['tmp_name'];
$file_size = $_FILES['file']['size'];
$file_err = $_FILES['file']['error'];
#prelevo dati del secondo file
$allegato_eng = $_FILES['file2']['name'];
$file_tipo2 = $_FILES['file2']['type'];
$file_temp2 = $_FILES['file2']['tmp_name'];
$file_size2 = $_FILES['file2']['size'];
$file_err2 = $_FILES['file2']['error'];
$directory = "..\\public\\"; //da dove si trova lo script
chmod($directory, 0777);
$SetString = "";
if(!empty($allegato)) mysql_query("UPDATE prodotti SET allegato = '$allegato' WHERE id_prodotti = $id");
if(!empty($allegato_eng)) mysql_query("UPDATE prodotti SET allegato_eng = '$allegato_eng' WHERE id_prodotti = $id");
$documento = $directory.$allegato;
$documento_eng = $directory.$allegato_eng;
if ($allegato != '' && (file_exists($documento))) { ?>
<script> alert("Il nome del file che state cercando di caricare é già esistente. Il file verrà sovrascritto. "); </script>
<?php
chmod($allegato, 0777); // <-qui mi dà l'errore
$cancellazione = unlink ($documento); // <-qui mi dà l'errore
if ($cancellazione){echo 'file cancellato! Provvedo a caricare il nuovo file'."
";}
}else{
echo 'Il file non é presente; verrà caricato sul server '."
";
}
$controllo= is_uploaded_file($file_temp);
if ($controllo) {
echo "Il file in lingua italiana é stato caricato sul server correttamente"."
";
}else {
echo "errore"; }
$spostamento = move_uploaded_file($file_temp , $directory.$allegato);
if (!$spostamento){
echo "Errore nello spostamento del file, contattare l'amministratore di sistema"."
"; }else{
echo "Caricamento e spostamento del file correttamente eseguito."."
";
}
Mi dà errori
sul chmod (Permission denied), sull'unlink (Permission denied) e sulla move_uploaded_file (failed open stream: permission denied).
La mia domanda é: é possibile che php non sovrascriva i file anche se imposto i chmod?
Può essere A...a il problema? sicuramente il mio script non sarà dei più perfetti (criticate criticate, così magari qualcosa lo imparo..da autodidatti si fa quel che si può..) però cavolo..