Legendary Pokémon

Full Version: HTML, PHP, C++ & apache...
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
Καταρχάς, χρόνια και ζαμάνια LP!

Τον τελευταίο καιρό (δηλαδή σχεδόν ένα χρόνο Toungue) ασχολούμουν λίγο με τον προγραμματισμό και για αυτό δεν έμπαινα συχνά (δηλαδή ποτέ Toungue). Ασχολήθηκα κυρίως με C++. Έφτιαξα νέο thread λόγο "πολυπλοκότητας" των ερωτήσεων.

Στο θέμα: Δημιουργώ σε C++ ένα quiz το οποίο θέλω να έχει online scoreboard (ο.Ο). Επέλεξα να χρησιμοποιήσω ως server (τουλάχιστον προσωρινά) τον υπολογιστή μου. Μετά από πολύ ψάξιμο, εγκατέστησα το xampp και (μέσω αυτού) το apache. Έφτιαξα ένα server στον οποίο μπορώ να ανεβάζω τα αρχεία μου αλλά μόνο από τους υπολογιστές του δικτύου μου, κι όχι απ’ το διαδίκτυο. Μετά χρειαζόμουν ένα τρόπο να ανεβάσω τα αρχεία. Βρήκα μία library σε C++ (curl) την εγκατέστησα (τρομερά χρονοβόρο λόγο link errors) και μετά προσπάθησα να κάνω upload μερικά αρχεία στον ftp server μου. Δυστυχώς όμως έλαβα το παρακάτω error όταν έτρεξα το πρόγραμμα στο debug mode “_CrtIsValidHeapPointer(pUserData)”. Δεν βρήκα λύση, οπότε έψαξα τρόπο για να κάνω τη δουλεία μέσω php. Εκεί κάτι βρήκα. Δουλεύει μία χαρά, αλλά θέλω να το τροποποιήσω λίγο: δεν θέλω ο χρήστης να επιλέγει τι αρχείο θα ανεβάσει, αλλά μόλις μπαίνει στη συγκεκριμένη ιστοσελίδα, ένα συγκεκριμένο αρχείο από τον υπολογιστή του να ανεβαίνει αυτόματα στον server μου (το txt με τα score) ή να μπορώ εγώ μέσω της C++ να ελέγξω τον browser και να τον κάνω να ανεβάσει το αρχείο που θέλω (αν γίνεται, σίγουρα δεν θα είναι εύκολο).

Συνοψίζω:

Α) Πως κάνω τον server μου διαθέσιμο στο internet και όχι μόνο στο τοπικό δίκτυο, π.χ. μέσω του apache (btw, πρέπει να κάνω την ip μου static);

Β) Τι αλλαγές πρέπει να γίνουν στους παρακάτω κώδικες ώστε μόλις ο χρήστης εισέλθει στην ιστοσελίδα μου να ανεβαίνει κατευθείαν από τον υπολογιστή του το αρχείο “C:/quiz/score.txt”, και όχι να του ζητείται τι αρχείο θα ανεβάσει;

(main.html)

<html>
<body>
<form enctype="multipart/form-data" action="uploader.php" method="POST">
<input type="hidden" name="MAX_FILE_SIZE" value="100000" />
Choose a file to upload: <input name="uploadedfile" type="file" /><br />
<input type="submit" value="Upload File" />
</form>
</body>
</html>



(uploader.php)

<?php
// Where the file is going to be placed
$target_path = "uploads/";

/* Add the original filename to our target path.
Result is "uploads/filename.extension" */
$target_path = $target_path . basename( $_FILES['uploadedfile']['name']);
$target_path = "uploads/";

$target_path = $target_path . basename( $_FILES['uploadedfile']['name']);

if(move_uploaded_file($_FILES['uploadedfile']['tmp_name'], $target_path)) {
echo "The file ". basename( $_FILES['uploadedfile']['name']).
" has been uploaded";
} else{
echo "There was an error uploading the file, please try again!";
}
?>
Κατ'αρχήν, αν είσαι σε Windows, προτείνω να δοκιμάσεις το WAMP, έχει ήδη διαθέσιμες βιβλιοθήκες και δεν χρειάζεται να παιδεύεσαι να τις κάνεις compile. Εφόσον θέλεις δε να σχεδιάσεις μια εφαρμογή για το web καλά έκανες και ακολούθησες την PHP, η C++ είναι για άλλου τύπου εφαρμογές και αρκετά ανώριμη για το internet.

Όσον αφορά στο πρόγραμμά σου δε, θα πρέπει να επανεξετάσεις το τι θες ακριβώς. Πρώτον δεν γίνεται να ανεβαίνει αυτόματα το αρχείο, γιατί φαντάσου τι θα γινόταν αν ο καθένας μπορούσε έτσι να σου πάρει χωρίς την άδειά σου όποιο αρχείο ήθελε. Επίσης σε διαβεβαιώ ότι δεν θες ο χρήστης να ανεβάζει κάποιο αρχείο καθώς πλέον θα πρέπει να ελέγχεις το συγκεκριμένο αρχείο για το αν είναι σωστά τα δεδομένα που έχει συν του ότι μπορεί να προκαλέσει επιπλέον προβλήματα ασφαλείας. Και τι γίνεται αν ο χρήστης δεν προέρχεται από Windows ή αν θέλει να παίξει το quiz από μια κονσόλα;

Για αυτό λοιπόν θες να καταλήξεις στην λύση των cookies, (σίγουρα τα έχεις ακούσει) και κατα 99% είναι ο μόνος τρόπος που χρησιμοποιούν ολες οι εφαρμογές στο internet όταν θέλουν να αποθηκεύσουν προσωρινές πληροφορίες, το υπόλοιπο 1% είναι τα SESSIONS (συνήθως χρησιμοποιούνται σε συνδυασμό) και κάποιες εξωτικές δυνατότητες της HTML5.
Και αφού μιλάμε για PHP: http://php.net/manual/en/features.cookies.php

Τώρα για να είναι διαθέσιμος ο server σου σε τρίτους, θα πρέπει να κάνεις το κατάλληλο port forwarding στο router σου, συγκεκριμένα την θύρα 80, και αν έχεις πχ το WAMP υπάρχει ειδική επιλογή "make server public" που αναλαμβάνει τις διάφορες ρυθμίσεις ασφαλείας. Στατική IP δεν είναι απαραίτητη, μπορείς να χρησιμοποιήσεις το http://www.dyndns.com/. Εναλλακτικά, μπορείς να βρείς κάποιον δωρεάν PHP host.
Ευχαριστώ πολύ, Arty2.

Λαμβάνοντας υπόψη τα θετικά και τα αρνητικά καταλήγω πως, κυρίως για λόγους ασφαλείας, θα χρησιμοποιήσω κάποιο free hosting service. Εάν το site μου έχει κάποια Α' επιτυχία, τότε βλέπουμε και για καλύτερες λύσεις. Σχετικά με το πρόγραμμα τώρα. Το πρόγραμμα το θέλω σε C++ για χρήση σε windows offline. Λόγο ασάφειάς μου σε έκανα να νομίζεις ότι είναι για χρήση σε ιστοσελίδα. Big Grin Την online δυνατότητα την χρειάζεται για να μπορεί ο χρήστης να ανεβάζει τα ρεκόρ του και να κατεβάζει πιθανές αναβαθμίσεις. Αν και ο προγραμματισμός ιστοσελίδων επιφέρει πιο άμεσα αποτελέσματα, προτιμώ να δημιουργήσω ένα παιχνίδι σε Direct X/OnenGL σιγά σιγά. Οπότε για το πρόγραμμα αυτό, μιας και η php δεν έχει δυνατότητα επικοινωνίας "απευθείας" με τον server δεν με βολεύει τόσο, αλλά δεν την αποκλείω ως λύση. Αυτό με την σαβούρα είναι επίσης πρόβλημα, αλλά με λίγες ώρες "ψαξίματος", πιστεύω θα το ξεπεράσω… Υπάρχει άλλος τρόπος γι αυτή τη δουλειά (π.χ. κάποια άλλη γλώσσα); Δηλαδή μόλις ο χρήστης γράφει "5 . Update" το console application μου να συνδέει τον υπολογιστή του με τον server μου και να κάνει το upload/download;
Μπορεί με κάποια βιβλιοθήκη που θα σου επιτρέπει να συνδέεται στο internet να δοκιμάζει να δει αν υπάρχει το αρχειο http://example.com/version123.txt το οποίο κάθε φορά θα έχει το όνομα της τελευταίας έκδοσης, που σημαίνει ότι όταν δεν υπάρχει, έχει βγει κάποιο update, όπως ψάχνει το IV Calculator για το υπάρχει νεώτερη έκδοση.
Καλή ιδέα, ευχαριστώ! Big Grin
Reference URL's