php copy function problem

Συζητήσεις για γλώσσες προγραμματισμού και θέματα σχετικά με προγραμματισμό.
Post Reply
User avatar
Ethel
Venus Project Founder
Venus Project Founder
Posts: 2395
Joined: Fri Mar 19, 2004 10:41 am
Academic status: Alumnus/a
Gender:
Location: New York City, NY
Contact:

php copy function problem

Post by Ethel » Fri Feb 18, 2005 9:29 pm

Έχω το εξής πρόβλημα, έχω ένα αρχείο το $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 εκ των προτέρων! :)
There's no place like 127.0.0.1
User avatar
HdkiLLeR
Venus Project Founder
Venus Project Founder
Posts: 4356
Joined: Tue Jan 27, 2004 4:41 pm
Academic status: Alumnus/a
Gender:
Location: New York, NY
Contact:

Post by HdkiLLeR » Sat Feb 19, 2005 2:35 am

Το $file και $dest τι τιμές έχουν; Μπορείς να κάνεις κάπου πρίν το copy ένα echo ή κάτι που εμφανίζει τέλοσπάντος τις τιμές τους για να δείς τι τιμές έχουν. Εφ΄όσον δεν μπορεί να ανοίξει το stream μάλλον το $file δεν έχει το σωστό filename ή μπορεί απλά να μην έχει το πλήρες path και στην συγκεκριμένη περίπτωση να το χρειάζεται. Δοκίμασε να δίνεις ολοκληρωμένα paths. Επίσης δεν ξέρω πως χειρίζεται η php τα paths των χαζοwin που είναι με κενά μέσα κλπ. Πχ c:\program files\... Κλπ μπορεί να φταίει και τπτ τέτοιο.
-----BEGIN GEEK CODE BLOCK-----
Version: 3.12
GCS d-->--- s+:+ a- C++(+++) BILS++++$ P--- L++++>+++++ E--- W+++ N+ o+ K w--
O M+ V-- PS++>+++ PE- Y++ PGP++ t+ 5+ X+ R* tv b++ DI- D+ G+++ e+++>++++ h r++ y++
------END GEEK CODE BLOCK------

"UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity." -- Dennis Ritchie
User avatar
Ethel
Venus Project Founder
Venus Project Founder
Posts: 2395
Joined: Fri Mar 19, 2004 10:41 am
Academic status: Alumnus/a
Gender:
Location: New York City, NY
Contact:

Post by Ethel » Sat Feb 19, 2005 10:16 am

Το $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!
There's no place like 127.0.0.1
User avatar
Argi
byte level
byte level
Posts: 122
Joined: Tue Nov 09, 2004 7:22 pm

Post by Argi » Sat Feb 19, 2005 12:17 pm

Στο 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.
User avatar
Ethel
Venus Project Founder
Venus Project Founder
Posts: 2395
Joined: Fri Mar 19, 2004 10:41 am
Academic status: Alumnus/a
Gender:
Location: New York City, NY
Contact:

Post by Ethel » Sat Feb 19, 2005 1:12 pm

Σωστό. Στατικά δουλεύει, αλλά δυναμικά με το να παίρνει την τιμή του $file από το text box σκαλώνει κάπου.Θα το βρω πού θα πάει.... Ευχαριστώ πάρα πολύ παιδιά
There's no place like 127.0.0.1
User avatar
HdkiLLeR
Venus Project Founder
Venus Project Founder
Posts: 4356
Joined: Tue Jan 27, 2004 4:41 pm
Academic status: Alumnus/a
Gender:
Location: New York, NY
Contact:

Post by HdkiLLeR » Sat Feb 19, 2005 1:52 pm

Μήπως όταν παίρνεις το path απο το text box δεν κάνεις replace to \ με \\;
-----BEGIN GEEK CODE BLOCK-----
Version: 3.12
GCS d-->--- s+:+ a- C++(+++) BILS++++$ P--- L++++>+++++ E--- W+++ N+ o+ K w--
O M+ V-- PS++>+++ PE- Y++ PGP++ t+ 5+ X+ R* tv b++ DI- D+ G+++ e+++>++++ h r++ y++
------END GEEK CODE BLOCK------

"UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity." -- Dennis Ritchie
User avatar
Ethel
Venus Project Founder
Venus Project Founder
Posts: 2395
Joined: Fri Mar 19, 2004 10:41 am
Academic status: Alumnus/a
Gender:
Location: New York City, NY
Contact:

Post by Ethel » Sat Feb 19, 2005 1:59 pm

το μόνο που κάνω είναι
<input type="file" name="uploadfile"> και μετά το $uploadfile αντί να περιέχει όλο το Path έχει μόνο το αρχείο
There's no place like 127.0.0.1
User avatar
Ethel
Venus Project Founder
Venus Project Founder
Posts: 2395
Joined: Fri Mar 19, 2004 10:41 am
Academic status: Alumnus/a
Gender:
Location: New York City, NY
Contact:

Post by Ethel » Wed Feb 23, 2005 1:10 am

Το βρήκα και το γράφω σε περίπτωση που τύχει και σε κανέναν άλλον αργότερα

Έχουμε

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!
There's no place like 127.0.0.1
Post Reply

Return to “Προγραμματισμός”