Archive

Posts Tagged ‘drupal’

Αποσυμπίεση zip αρχείων με την php

17 Ιανουαρίου, 2009 No comments

Καταρχήν γιατί; Για τον απλό λόγο ότι οι εγκαταστάσεις – αναβαθμίσεις των γνωστών CMS και weblogs απαιτούν το upload ενός μεγάλου αριθμού αρχείων και φακέλων στον server όπου φιλοξενούνται. Το upload του κάθε ενός αρχείου είναι και ένα διαφορετικό session (connect, open port, transfer file, close port, disconnect – πολύ χοντρικά) με αποτέλεσμα να υπάρχει τεράστιο overhead για το ανέβασμα πολλών αρχείων. Αυτό πρακτικά γίνεται αντιληπτό από τον σημαντικά περισσότερο χρόνο που χρειάζεται το upload 100 αρχείων (συνολικού μεγέθους 3 ΜΒ για πάραδειγμα) απ’ ότι το upload ενός μεγάλου αρχείου 3MB. Το ίδιο ακριβώς ισχύει και κατά την αντιγραφή πολλών αρχείων από ένα σκληρό δίσκο σε ένα usb stick. Αν τα αρχεία ενσωματωθούν σε ένα archive (zip, rar κλπ) ο χρόνος αντιγραφής είναι δραματικά μικρότερος – ειδικά αν μιλάμε για πολλά αρχεία.

Γίνεται; Σαφώς και γίνεται. Λαμβάνοντας υπόψη τον χρόνο που χρειάζεται για να φέρει και να ανεβάσει την καινούργια έκδοση του wordpress το automatic upgrade plugin σε σχέση με τον χρόνο του upload από τον χρήστη, το κέρδος – σε χρόνο – πρέπει να είναι μεγάλο. (Και είναι πραγματικά μεγάλο, όπως θα εξηγήσω παρακάτω).

Πως; Το πρώτο μέρος που έψαξα ήταν το php.net. Δυστυχώς όμως η συνάρτηση ZipArchive::extractTo δεν κάνει τη δουλειά. Επόμενη στάση google. Σαν πρώτο αποτέλεσμα δίνει αυτό το post. Αυτό το script κάνει extract αλλά – όπως γράφει και ο δημιουργός του – δεν μπορεί να δημιουργήσει φακέλους που πιθανόν να υπάρχουν μέσα στο zip archive. Οπότε πάλι δεν μας κάνει. Τελικά μετά από αρκετό ψάξιμο βρήκα αυτό. Αυτό το script είναι ένα πραγματικά χρήσιμο εργαλείο το οποίο μπορεί να σου γλυτώσει πολύ χρόνο σε διαδικασίες εγκατάστασης – αναβάθμισης. Η δοκιμή που έκανα στο portal μου (που βασίζεται σε drupal) ήταν απολύτως επιτυχημένη ενώ το upgrade έγινε σε πολύ λιγότερο χρόνο από τα προηγούμενα upgrades. Συνιστάται ανεπιφύλακτα.

Υ/Γ. Γιατί να μην υπάρχει και ένα plugin για automatic drupal upgrade?