MKDIR e COPY

z.cristiano

Utente Attivo
16 Giu 2007
145
0
16
Salve a tutti...
Ho una difficoltà...

Allora, sul LOCALHOST e nella pagina PHP ho programmato

Codice:
<?php
if(mkdir("prova")
{
if(chmod("prova", 0777))
{
copy("file.inc", "prova/file.inc");
}
}
?>

Funziona benissimo sul mio locale, mentre sul mio server no..
Cioè funziona solo creare automaticamente la cartella ma copiare il file FINE.INC no, perchè?

Invece se usassi solo COPY senza MKDIR e CHMOD funziona, se crea automaticamente la cartella, abilita i permessi in 0777 e copiare il file non funziona!
Perchè^

Cosa ho sbagliato?
 
Tutt'e due! Funzionano perfettamente sul LOCALHOST tra Windows 7 e Ubuntu 9.10! Solo sul server non funziona!
 
Se il file file.inc l'hai messo su tramite ftp dal locale (come immagino) potrebbe essere che non abbia il giusto owner e quindi la copia fallisca per questo.
Ti copio la soluzione che c'è sul sito www.php.net per la voce chmod:
Codice:
Problem:
you are trying to circumvent SAFE_MODE setting that prevents you from using chmod() on files you uploaded via a regular ftp client, because php may run as user 'nobody', which is not the user from your ftp session.
using ini_set() won't work
using ftp_chmod() won't work either

Solution:
copy file to some temorary directory. 
delete original file altogether. 
copy temporary file back to original location. 
do the chmod()
 
Ciao, beh non è solo questo...
Anche perchè mi sono accorto una cosa...

Quando faccio il COPY() o MKDIR() e una volta fatti, sul programma FTP e nella colonna PROPRIETARIO - GRUPPO sono diventati APACHE APACHE, mentre se carico io manualmente i file tramite FTP diventano il nome dell'USER ftp e il gruppo PSACLN e avendo due gruppi e proprietari diversi non funzionano ed è per questo motivo...

Però ho trovato i codici PHP chiamati

CHOWN e CHGRP e ho compilato:

chown("cartella", "provasito");
chgrp("cartella", "psacln");

Non funziona!
:-(
Perchè?

Cosa posso fare per risolvere il problema?
 
Per risolvere il problema dovresti essere amministratore di sistema sul server, cosa che ovviamente non sei :)
Anche se PHP permette molte cose, queste spesso sono disabilitate per motivi di sicurezza per esempio se qualuno prendesse possesso del tuo account o anche tu ovviamente potresti in via teorica cambiarti nome in quello di qualcun altro. Magari root ;-)
Quindi cosa puoi fare, intanto verificare che quando fai la copia il file sorgente ci sia veramente, ovvero che il percorso sia valido a priori e così anche per la destinazione, può essere che al momento della copia la destinazione non esista :)
Puoi anche crearti una tua funzione copy con file_get_contents() e file_put_contents(), ovvero apri il file da copiare e lo ricrei dentro la cartella di destinazione.
PHP:
function myCOPY($file_sorgente, $file_destinazione) {
    $file_data = file_get_contents($file_sorgente);
    if (!file_put_contents($file_destinazione, $file_data, LOCK_EX) echo 'Non ho potuto copiare il file';
}
Usando pure LOCK_EX se hai PHP 5.1.0 o superiore, impedisci a qualsiasi altro programma di accedere a 'destinazione' durante l'operazione di scrittura.
$file_sorgente e $file_destinazione possono contenere anche il path oltre al nome del file.
 
Infatti non sono il sistemista..
:)

Hai ragione, però dato che ho il mio server e il sistemista è un mio amico per cui, mi puoi per favore dire cosa gli devo dire a lui nel come impostare/attivare qualcosa sul server?

Suppongo che è il file PHP.INI che deve modificare?

Ti aspetto e grazie infinite
:)