Page 1 of 1

php copy function problem

Posted: Fri Feb 18, 2005 9:29 pm
by Ethel
Έχω το εξής πρόβλημα, έχω ένα αρχείο το $file και θέλω να το κάνω copy κάπου. Στην copy λοιπόν γράφω copy($file, $dest) όπου dest το path εκεί που θέλω να το πάω (string και τα 2 εννοείται).
Έψαξα όμως στο internet και κάποιος που παιδευόταν συμβουλεύει στο dest να μη βάζουμε μόνο το path που είναι ο κατάλογος που θέλουμε να χώσουμε το αρχείο, αλλά και το ακριβές όνομα του αρχείου. Το κάνω όλο αυτό τέλοσπάντων και μου βγάζει

Code: Select all

Warning:copy(file.dbf):failed to open stream:No such file or directory in d_upload.php
Έχει κανείς καμιά ιδέα γιατί δεν δουλεύει αυτό;
Thanks εκ των προτέρων! :)

Posted: Sat Feb 19, 2005 2:35 am
by HdkiLLeR
Το $file και $dest τι τιμές έχουν; Μπορείς να κάνεις κάπου πρίν το copy ένα echo ή κάτι που εμφανίζει τέλοσπάντος τις τιμές τους για να δείς τι τιμές έχουν. Εφ΄όσον δεν μπορεί να ανοίξει το stream μάλλον το $file δεν έχει το σωστό filename ή μπορεί απλά να μην έχει το πλήρες path και στην συγκεκριμένη περίπτωση να το χρειάζεται. Δοκίμασε να δίνεις ολοκληρωμένα paths. Επίσης δεν ξέρω πως χειρίζεται η php τα paths των χαζοwin που είναι με κενά μέσα κλπ. Πχ c:\program files\... Κλπ μπορεί να φταίει και τπτ τέτοιο.

Posted: Sat Feb 19, 2005 10:16 am
by Ethel
Το $File παίρνει μια τιμή μέσα από ένα FileChooser (δλδ έχει ένα κουμπί BRowse, το πατάς ανοίγει ένα παράθυρο, επιλέγεις αρχείο και αυτό εμφανίζεται μέσα σε ένα text box. από εκεί παίρνει την τιμή το $file)
To περίεργο είναι πως ενώ το Text box που σου λέω μπορεί να γράφει ένα τεράστιο path πχ. c:\program files\...\file.dbf αλλά η τιμή που παίρνει (με echo το είδα) είναι μόνο $file="file.dbf".
Το $dest έχει ένα string του path "c:\program files\...\dbfs\κάτι.dbf"
Θα προσπαθήσω αυτό που λες, έχω υπόψη μια συνάρτηση την urlencode που κάτι κάνει στα "\" και στα κενά....
Τhanks!

Posted: Sat Feb 19, 2005 12:17 pm
by Argi
Στο warning σου βγάζει :
Warning:copy(file.dbf):failed to open stream:No such file or directory in d_upload.php

Αυτό σημαίνει ότι έδωσες σαν όρισμα για μονοπάτι του αρχείου μόνο τη
λέξη file.dbf που με τη σειρά του σημαίνει ότι η php ψάχνει το αρχείο στον
ίδιο φάκελο που βρίσκεται και το script σου (το οποίο μάλλον έχει όνομα d_upload.php) και φυσικά δεν βρίσκει τίποτα αφού το αρχείο δεν είναι εκεί.

Επίσης,
στα Windows τα paths καλό είναι να τα γράφεις με \\ αντί για / του Unix.

Posted: Sat Feb 19, 2005 1:12 pm
by Ethel
Σωστό. Στατικά δουλεύει, αλλά δυναμικά με το να παίρνει την τιμή του $file από το text box σκαλώνει κάπου.Θα το βρω πού θα πάει.... Ευχαριστώ πάρα πολύ παιδιά

Posted: Sat Feb 19, 2005 1:52 pm
by HdkiLLeR
Μήπως όταν παίρνεις το path απο το text box δεν κάνεις replace to \ με \\;

Posted: Sat Feb 19, 2005 1:59 pm
by Ethel
το μόνο που κάνω είναι
<input type="file" name="uploadfile"> και μετά το $uploadfile αντί να περιέχει όλο το Path έχει μόνο το αρχείο

Posted: Wed Feb 23, 2005 1:10 am
by Ethel
Το βρήκα και το γράφω σε περίπτωση που τύχει και σε κανέναν άλλον αργότερα

Έχουμε

Code: Select all

<input type="file" name="event">
Υπάρχει superglobal array το $_FILES. Για κάθε αρχείο που γίνεται upload κρατάει name, type, size και tmp_name που είναι η προσωρινή τοποθεσία του αρχείου στον server (αυτόκαθορίζεται μέσα στο php.ini).
Το $_FILES['event']['name'] είναι όλο το Path του αρχείου, όπως φαίνεται στο text box που λέγαμε.
Η συνάρτηση basename() επιστρέφει μόνο το αρχείο.
Δηλαδή αν

Code: Select all

$_FILES['event']['name']=D:\Admin\...\...\file.txt
τότε

Code: Select all

$file=basename($_FILES['event']['name'])
το $file περιέχει μόνο το string file.txt
Τέλος η

Code: Select all

move_uploaded_file($_FILES['event']['tmp_name'], "..\dbfs"."\\".$file)
μεταφέρει το επιθυμητό αρχείο στην επιθυμητή τοποθεσία και μάλιστα με το ίδιο ακριβώς όνομα!

Ευχαριστώ για τα tutorials hdkiller!