philos Δημοσ. 7 Σεπτεμβρίου 2018 Δημοσ. 7 Σεπτεμβρίου 2018 (επεξεργασμένο) Καλησπέρα! Έχω συνθέσει την ακόλουθη μέθοδο κλάσης, η οποία λειτουργεί κανονικά σε xampp / localhost: protected function base64_to_jpeg($base64_string, $output_file = 'temp.jpg') { // open the output file for writing $ifp = fopen( $output_file, 'wb' ); // split the string on commas // $data[ 0 ] == "data:image/png;base64" // $data[ 1 ] == <actual base64 string> $data = explode( ',', $base64_string); // we could add validation here with ensuring count( $data ) > 1 fwrite( $ifp, base64_decode( $data[ 1 ] ) ); // clean up the file resource fclose( $ifp ); return $output_file; } Ωστόσο στον online server προκύπτει το εξής php error: Αναφορά σε κείμενο [E_WARNING] fopen(temp.jpg): failed to open stream: Permission denied in xxx/xxx/xxx/Banner.php Δοκίμασα κι αυτό μέσα στη μέθοδο: $fileHandleResource = tmpfile(); $metaData = stream_get_meta_data($fileHandleResource); $output_file = $metaData['uri']; // open the output file for writing $ifp = fopen( $output_file, 'r+'); Όμως ακόμα χειρότερα δεν δουλεύει ούτε στο xampp καθώς λέει ότι δεν βρέθηκε το προσωρινό αρχείο: Αναφορά σε κείμενο fopen(C:\Users\petro\AppData\Local\Temp\php1069.tmp): failed to open stream: No such file or directory in xxx/xxx/xxx/Banner.php Καμιά ιδέα για να κάνω την παραπάνω λειτουργία να δουλέψει και σε server; Προφανώς το xampp μπορεί και γράφει οπουδήποτε. Μάλλον θα είναι κάτι με το configuration, όμως έχω μια υποψία ότι το ότι ορίζω απλά ένα "temp.jpg" δεν επαρκεί. Στη πραγματικότητα θέλω να ορίσω προσωρινό αρχείο κι όχι να διαβάσω κάποιο (μη προσωρινό) από το δίσκο καθώς. Το script κάνει και κάποιες άλλες επεξεργασίες μετά, συνεπώς προσπαθώ να διορθώσω την base64_to_jpeg() ώστε να δουλεύει παντού. Ευχαριστώ εκ των προτέρων για την όποια βοήθεια Επεξ/σία 7 Σεπτεμβρίου 2018 από philos
mad-proffessor Δημοσ. 8 Σεπτεμβρίου 2018 Δημοσ. 8 Σεπτεμβρίου 2018 Είναι jpeg αρχείο άρα είναι binary , επομένως θα το ανοίξεις όπως ξεκίνησες αρχικά (και όχι με r+) απλά πριν τη κλήση στην fopen θα πρέπει να κάνεις είτε chown είτε chmod στο .jpeg αρχείο για να έχει ο χρήστης σου τα κατάλληλα δικαιώματα.
philos Δημοσ. 8 Σεπτεμβρίου 2018 Μέλος Δημοσ. 8 Σεπτεμβρίου 2018 Έκανα διάφορες δοκιμές βάζοντας τη γραμμή chmod($output_file, 0777); αλλά χωρίς αποτέλεσμα. Ας πούμε, αν χρησιμοποιήσω αυτή τη λειτουργία: protected function base64_to_jpeg($base64_string) { $fileHandleResource = tmpfile(); $metaData = stream_get_meta_data($fileHandleResource); $output_file = $metaData['uri']; chmod($output_file, 0777); $data = explode(',', $base64_string); // we could add validation here with ensuring count( $data ) > 1 fwrite($fileHandleResource, base64_decode($data[1])); // open the output file for writing $ifp = fopen($output_file, 'r+'); return $output_file; } ... λαμβάνω λάθος: Αναφορά σε κείμενο E_WARNING] fopen(/tmp/phpXXXXX): failed to open stream: No such file or directory in src/XF/Util/File.php at line 100 Βασικά φαίνεται ότι το αρχείο διαγράφεται στην πορεία του script ή απλά δεν δημιουργείται ποτέ... Σας επισυνάπτω τα συγκεκριμένα 2 scripts για όποιον έχει όρεξη να δει συνολικά την πορεία / πρόβλημα (δεν είναι τίποτα τεράστια). Ουσιαστικά μας ενδιαφέρει η base64_to_jpeg() που μιλάμε, καθώς και η copyFileToAbstractedPath() στο File.php (η line 100 που λέει παραπάνω ότι δεν βρίσκει το αρχείο). hmm... script1.php File.php
sarakinos Δημοσ. 28 Σεπτεμβρίου 2018 Δημοσ. 28 Σεπτεμβρίου 2018 Είσαι οκ με τα δικαιώματα; έχει ο χρήστης που τρέχει την php δικαίωμα να γράψει στον φάκελο που πας να βάλεις το αρχείο;
elvizakos Δημοσ. 30 Σεπτεμβρίου 2018 Δημοσ. 30 Σεπτεμβρίου 2018 Στις 7/9/2018 στις 11:07 ΜΜ, philos είπε $ifp = fopen( $output_file, 'wb' ); Το wb τι είναι; Μήπως θέλεις να γράψεις w+; Στις 7/9/2018 στις 11:07 ΜΜ, philos είπε $ifp = fopen( $output_file, 'r+'); Εδώ θα σου βγάλει σφάλμα αν το αρχείο δεν υπάρχει. Δοκίμασε το w+ αντί για r+. Για περισσότερες πληροφορίες σχετικά με τα access modes δες http://php.net/manual/en/function.fopen.php.
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα