Newsgroup: it.comp.www.php
Titolo: PHP 5 e FUCTION COPY

Dopo un lungo pellegrinare mi sono deciso a passare dalla versione PHP
4.3.x alla versione 5.x, il punto è questo che quando ho fatto
l'upgrade ho riscontrato degli errori anomali nel blocco di codice
della funzione copy
Questo è il pezzo di codice incriminato:
$posinizimg = strrpos($img, "\'")+1;
$posfinimg = strlen($img);
$lunghezzaimg = $posfinimg - $posinizimg;
$img= substr($img, $posinizimg, $lunghezzaimg);
if ($img != ''){ $img= "archivioimg/".$img; copy($immagine,$img); }
e questo è l'errore che mi da in fase di inserimento/aggiornamento:
Warning: copy(images/locandine/:\\DATASTORAGE\\Web
Space\\Work\\WEBSERVER_20050726\\WEBSERVER\\APACHE\\WWW\\sitovideoteca\\images\\anteprima.gif)
[function.copy]: failed to open stream: Invalid argument in
E:\pdrive\www\sitovideoteca\areariservata\upvideo.php on line 42
Non so come risolverlo che qualcuno mi illumini la strada. :-)


Prova a fare die($immagine,$img); prima di copy e scrivi qui output

Deve essere scritto così
if ($img != ''){ $img= "images/locandine/".$img; die($immagine,$img);
copy($immagine,$img); }
perchè va in errore e questo è quello che mi da:
Parse error: syntax error, unexpected ',' in
E:\pdrive\www\sitovideoteca\areariservata\upnew.php on line 42

EKELON77 wrote:

perche' die accetta un solo parametro..
dovrebbe essere..
if ($img != '') {
  $img= "images/locandine/$img"; 
  copy($immagine,$img) OR die("$immagine $img<br />\n");
}
-- 
www.iuz-lab.info

 [function.copy]: failed to open stream: Invalid argument in
[..]
controlla l'esistenza dei dei file e delle loro posizioni..
-- 
www.iuz-lab.info

 
Ops sono un po distratto stamani :)

Questo dovrebbe essere l'output che mi hai chiesto:
Warning: copy(images/locandine/:\\DATASTORAGE\\Web
Space\\Work\\WEBSERVER_20050726\\WEBSERVER\\APACHE\\WWW\\sitovideoteca\\areariservata\\images\\locandine\\31.jpg)
[function.copy]: failed to open stream: Invalid argument in
E:\pdrive\www\sitovideoteca\areariservata\upnew.php on line 45
C:\WINDOWS\TEMP\php5C.tmp images/locandine/:\\DATASTORAGE\\Web
Space\\Work\\WEBSERVER_20050726\\WEBSERVER\\APACHE\\WWW\\sitovideoteca\\areariservata\\images\\locandine\\31.jpg


No non hai capito. Mi interessa quello che passi alla funzione copy. 
quindi mettici die("$immagine , $img<br />\n"); prima di copy.

Come devo fare se metto die con la virgola mi va in errore il parser?
Cmq faccio vedere come ho scritto il codice:
if ($img != '') {
  $img= "images/locandine/$img";
  copy($immagine,$img) OR die("$immagine $img<br />\n"); }
Giudica tu le modifiche da apportare per ottenere quello che desideri.
:-)

   copy($immagine,$img) OR die("$immagine $img<br />\n"); }
if ($img != '') {
   $img= "images/locandine/$img";
   die ("$immagine | $img");


Questo è l'otput con il die sono riuscito ad estrarlo:
C:\WINDOWS\TEMP\php93.tmp
,images/locandine/:\\pdrive\\www\\sitovideoteca\\areariservata\\images\\locandine\\31.jpg
Come vedi nella seconda parte manca la lettera dell'unità.
Spero che questo ti possa essere di aiuto per risolvere il problema che
ho.


$posinizimg = strrpos($img, "\'")+1; prova a cavare il + 1. In pratica 
ti mangi la lettera con substr. (questo sempre se ti ostini ad usare 
quella funzione invece di basename)

Quindi se ho capito bene ho 2 soluzioni:
1) Togliere il +1
2) Sostiture la funzione X con basename
Purtroppo non ho ben capito a quale funzione ti riferisci delle 2:
strrpos o substr, e poi è semplice da applicare la funzione basename
non vorrei stravolgere il codice solo per farla funzionare con php 5.
Cmq. mi puoi aiutare a fare le mdifiche.
N.B.: Con PHP 4 funziona perfettamente


Dubito che c'entra passaggio php4->php5 di per se, sarà un cambiamento 
di php.ini a provocare questo casino. Cmq manca un pezzo di codice 
iniziale (del tipo $img che azz è) senza il quale è difficile capire 
quello che vuoi fare (addirittura mi viene il dubbio che vuoi spostare 
il file uploadato senza usare move_uploaded_file)

Non lo sposto lo copio e scrivo il path nel db, riguardo al pezzo di
codice mancante non saprei come intervenire per risolvere il problema
senza avere troppi traumi.


ah.... allora avevo ragione. Ma scusa una curiosità: che cosa c'è che 
non va in move_uploaded_file?

Non conosco la funzione cmq. ti mando l'intero codice:
<?
include "sessione.php";
function refresh($url,$t)
{
 echo "<META HTTP-EQUIV=REFRESH CONTENT=\"$t;  URL=$url\">";
}
?>
<html>
<head>
<title>Modifica</title>
<link rel="stylesheet" href="stile.css" type="text/css">
</head>
<body bgcolor="#FFFFFF">
<?
include "connessione.php";
$selnw =  "select * from novita where titolo = '$title' and idnew !=
$idnew";
$querynw = mysql_query ($selnw,$connes)
                or die ("Non riesco ad eseguire la richiesta");
$valnw = mysql_fetch_array ($querynw);
$idnw = $valnw ["idnew"];
$title2  = str_replace("\'", "'", $title);
if ($idnw == ''){
if ($delimg == 'Si') {
$img= "";
} else {
$posinizimg = strrpos($img, "\'")+1;
$posfinimg = strlen($img);
$lunghezzaimg = $posfinimg - $posinizimg;
$img= substr($img, $posinizimg, $lunghezzaimg);
if ($img != ''){ $img= "images/locandine/".$img; copy($immagine,$img);
}
else { $img= $fotoold; }
}
$modnew =  "update novita
              set titolo = '$title', genere = '$genere', trama =
'$trama', noleggiare = '$noleggiare',  foto = '$img',  newhome =
'$nwhome', newpage = '$nwpage'
			  where idnew = $idnew";
$querymodnew = mysql_query ($modnew,$connes)
			        or die ("Non riesco ad eseguire la richiesta torna
indietro");
?>
<table width="500">
	 <tr>
	   <td width="40%"></td>
	   <td width="60%" align = "center">
		   <? echo "<br><br><b><span class='red'><font color=\"#D50000\"> Sto
modificando il Titolo. ATTENDERE.... </font></b></span>"; ?>
       </td>
	 </tr>
</table>
<?
mysql_close ($connes);
$msg = "Il film è stato modificato";
refresh("gestnews.php?msg_mod=$msg",1);
exit;
} else { ?>
<table width="500">
	 <tr>
	   <td width="50%"></td>
	   <td width="50%" align = "center">
         <?  echo "<br><br><b><span class='red'><font
color=\"#D50000\"> ATTENDERE.... </font></b></span>"; ?>
	   </td>
	 </tr>
</table>
<?
mysql_close ($connes);
$msg = "Il nome del film che hai scelto è già presente";
refresh("gestnews.php?msg_mod=$msg",1);
exit;
} 
?>
</body>
</html>

Cristo che casino. Un paio di consigli:innanzi tutto sviluppa con 
register_globals impostato a off utilizzando quindi $_POST e $_GET è un 
miracolo che questo codice gira su php5 (hai impostato register globals 
a on suppongo in php.ini). Inoltre se proprio devi mischiare cosi tanto 
html e php allora fai stampa di php usando
print(<<<EOF
HTML
EOF
);
E per amor del cielo evita cose del tipo } else { ?>html
Cmq se il file che devi spostare è dato dall'upload allora usa questa 
funzione  
http://www.php.net/move_uploaded_file

Mi puoi dare ulteriori delucitazioni con magari un esempio di code php,
cmq è vero ho impostato register_globals su ON, l'utilizzo attualmente
per il passaggio delle variabili tra una pagina all'altra.