#1 11. Dezember 2004 Wie ich so gerade beim n sitze kommt mir eine geniale Idee! Beim wbb ist eine funktion eingebaut, die es erlaubt, sql dateien zu erzeugen, die 8mb großwerden und on-the fly runterzuladen, obwohl zum beispiel bei funpic ein filesizelimit von 800kb herrscht! Das heißt, das diese datei automatische per php(??) generiert wird! Das wäre doch ideal um warez zu uppen, ein progg, dass dateien in sqls verschlüsselt und ein php(?)script, welches diese on-the-fly zusammensetzt! Wer kennt sich darin aus und würde mir sowas entwickeln oder mir helfen oder hat nur eine gute idee? Danke schonmal und ich hoffe ihr versteht, was ich meine! + Multi-Zitat Zitieren
#3 11. Dezember 2004 ka, du lädst das file mit nem tool hoch und ein script splittet es in viele sqls! Aber das neue daran wäre, dass man nur einen link anklickt und ein script dann aus den ganzen sqls wieder diese eine file macht! + Multi-Zitat Zitieren
#4 11. Dezember 2004 Soweit ich informiert bin, ist es möglich mit PHP eine Datei vom Server einzulesen, den Inhalt in eine Variable zu speichern, dann die nächste Datei lesen, den Inhalt an die Variable anhängen, usw... Und dann am Ende hat man eine riesige Variable und gibt die dann auf einen Schlag aus. (Hab das schonmal mit kleinen Dateien probiert, geht wirklich) Geht aber glaub ich nicht mit allen PHP fähigen Servern, hab schon welche gesehen, bei denen die Funktion gesperrt ist + Multi-Zitat Zitieren
#7 12. Dezember 2004 natürlich geht das, aber das wäre totaler schwachsinn da man im in der datenbank ne total lange table hat (mal abgesehen davon das man für jede zeile eine neue table machen müsste ) von text die auch soviel belegt, wie das eigentlich file oder mehr, dann wäre da noch das problem das die datei villeicht zerstört werden kann, kopiert einfach mal ausm editor den text und fügt sie in eine neue text datei und wandelt diese um, wenn das net funzt gehts schon 10mal nicht. Dann beachtetet mal was für ein haufen arbeit für php es ist die table auszulesen, das würde ernorm zeit beanspruchen. Man könnte aber die größe des textes in der datenbank kleiner machen indem man sie vorher decodieren lassen würde, das würde aber ein haufen zeit kosten einen decoder extra für diese datei zu machen. Im endeffekt würde dies nur nen haufen traffic verursachen + Multi-Zitat Zitieren
#8 12. Dezember 2004 Die Idee ist vom prinzip her nicht schlecht, aber wohl nicht realisierbar! Überlege mal, selbst wenn du die gesplitteten Files nicht in einer SQL Datenbank ablegst, sondern real als Dateien und sie dann beim download on-the-fly von einem Script zusammensetzten lässt, das würde jeden PHP Server fraggen. Eine Datei so gross wie ein Film, ca. 100 User... na gute Nacht. Jeder Anbieter würde dich sofort rausschmeissen, bei der Rechenleistung die das Script benötigt, es müssen beim zusammensetzten ja auch noch interne CRC Checks gemacht werden etc. Aber es wäre vielleicht mal eine überlegung wert soetwas dezentral, z.b. in einem leecher programm zu realisieren... + Multi-Zitat Zitieren
#9 12. Dezember 2004 Habs rausgekriegt: Ihr erstellt ne PHP Datei auf dem Server, die wie folgt aussieht: PHP: <? php $rawname = 'archiv.rar' ; //Der ursprüngliche Dateiname $blocks = 5 ; //Anzahl Blöcke $position = 1 ; header ( 'Content-Description: File Transfer' ); header ( 'Content-Type: application/force-download' ); header ( 'Content-Disposition: attachment; filename=' . $rawname ); while( $position <= $blocks ){ readfile ( $rawname . '.' . $position ); $position ++;} ?> dann ladet ihr in das Verzeichnis mit der PHP Datei die einzelnen Bruchstücke hoch (bitte nicht mit WinRar die Datei "stückeln", sonst kommen da Header mit rein und es funzt nicht mehr. Ihr ladet also folgende Dateien hoch: download.php archiv.rar.1 archiv.rar.2 archiv.rar.3 archiv.rar.4 archiv.rar.5 Um diese Bruchstücke zu erstellen, hab ich mal nen Programm geschrieben: (hab ich angehängt, ihr braucht aber das .net Framework, damit es läuft). Bei InputFile gebt ihr die ursprüngliche Datei an. Bei BlockSize kommt rein, wieviel Bytes jedes Bruchstück groß sein soll. Dann sollte das Programm eigentlich die Bruchstücke erstellen. (Sollte es das mal nicht tun, schreibt mir ne PN wo der Fehler drinsteht) Am Ende braucht nur einer über den Browser download.php aufrufen und dann schickt das script ein stück nach dem anderen durch die Leitung. Bei mir geht das Script, hab mal eine 6MB Datei damit gestückelt und bei Tripod hochgeladen. Funzt sehr gut und mit FullSpeed EDIT: Bei Funpic gehts auch, habs grade probiert EDIT: 20MB Datei geht auch, also denk ich mal, dass das Script funzt + Multi-Zitat Zitieren
#10 12. Dezember 2004 Ist ja mal ne nette idee....ich will jetzt nix nocha wiederholen aber wie gesagt, würde den server total ins aus schießen(mal von der arbeit abgesehen), außer man baut ein paar sleeps ein..aber dauert viel zu lange dann... @sebi: sehr nett, aber das script arbeitet ja nicht das zeugs in die datenbank ein, aber sehr bequem achso, ich habs mir mal angeschaut, müste das script nicht reintheoretisch alles aufeinmal durschschießen? nicht das das schlecht wäre, aber bei manchen geht villeicht die performance den bach runter ^^ + Multi-Zitat Zitieren
#11 12. Dezember 2004 Aus welchem Grund sollte das passieren? Ob der Server jetzt eine riesige Datei einliest und an den Client schickt oder ob er nun ein paar kleine Dateien einliest und nacheinander an den Client schickt... is eigentlich egal meine ich. Da das Script ohne SQL Abfrage ist, sollte es eigentlich sogut wie gar keine Rechenzeit in Anspruch nehmen (nur eben die "normale". + Multi-Zitat Zitieren
#12 12. Dezember 2004 kp, auf den ersten blick sieht das script einfach so für mich aus, als würde es einfach durchlaufen bis 5 $blocks = 5; //Anzahl Blöcke $position = 1; ... while($position <= $blocks){ //heist ja das es von 1 bis 5 geht readfile($rawname.'.'.$position); //der dateiname für die datein $position++; //und das die 1 jeweils und 1 erhöht wird.. } dann müsste ja das script praktisch nochmal durchlaufen und 2 laden und dann 3.. bitte verbesser mich, manchmal kann ich halt php richtig und manchmal nischt, weil es macht schonwas aus ob ich 100 archive habe und die werden alle nacheinander geladen (standart mäßig kann man ja nur 4/2 datein aufeinmal runterladen, wenn eins fertig ist, dann kommt das nächste, nur man kann das ja ausschalten und ich denke kein 400mhz rechner haltet das aus *g* ) XD (übrigens wurde es wie oben aufgefordert das es in die sql kommt) + Multi-Zitat Zitieren
#13 12. Dezember 2004 Stimmt, es sollte in die SQL Datenbank rein, aber das ist ja, wurde glaube ich auch schon gesagt, mit ziemlicher Rechenbelastung für den armen Server verbunden... Das Script funktioniert so: $rawname = 'archiv.rar'; Hier gibt man seinen Dateinamen ein $blocks = 5; Hier gibt man ein, in wie viele Blöcke seine Datei gesplittet wurde $position = 1; header('Content-Description: File Transfer'); header('Content-Type: application/force-download'); header('Content-Disposition: attachment; filename=' . $rawname); while($position <= $blocks){ readfile($rawname.'.'.$position); Die Funktion ReadFile liest eine Datei vom Server und gibt sie sofort an der Client weiter, das funktioniert geilerweise auch mehrmals hintereinander $position++; nächste Datei } Es dürfte praktisch gesehen gar kein Problem sein eine 700 MB Datei so zu laden, wenn man die Einzelstücke zum Beispiel als 500kB Häppchen hat. Dann würden immer nur 500 kB eingelesen werden. Ausgeben, warten bis alles angekommen ist, nächsten 500 kB lesen, ausgeben, warten... Dann hat man halt 1400 Dateien und die werden nacheinander ausgegeben, ich seh da kein Problem. Sollte es doch anders funktionieren, lasse ich mich gern belehren. Ich empfehle aber trotzdem 15MB oder 10MB RAR Archive zu verwenden und diese dann einzeln zu splitten, sonst is es doch nicht so und der RAM vom Server wird (kurzzeitig) mit 700MB belastet und alles schmiert ab, wär ja "unschön" + Multi-Zitat Zitieren
#14 12. Dezember 2004 Also ist ReadFile daran schuld das es hintereinander geladen wird? Interresant. Danke dir, hab ich wiedermal was gelernt (habe das script ja leider net getestet^^ ) Respekt an dich, mir wäre so ein script nicht im leben eingefallen. (mir fällt sowieso nichts ein) + Multi-Zitat Zitieren
#15 17. Dezember 2004 hat noch nich ma so viel mit rechenbelastung zu tun. denkt doch ma nach, was passieren würd, wenn jemand 600 mb an irgendwelchem zeugs in ne sql datenbank upped. es gibt denk ich keinen einzigen anbieter der so was unterstützt. ich glaube aber, es wäre eine interessante idee ein proggi zu schreiben, welches selber splittet und auf nen funpic acc. oder so upped... *sich an die arbeit macht* + Multi-Zitat Zitieren
#16 18. Dezember 2004 Hab meinen Splitter nochmal etwas umgeschrieben, man kann jetzt Dateien auf die EXE draufziehen und muss nur noch die Blockgröße angeben (wenn man was ungültiges eingibt oder gar nichts, wird 500000 Byte verwendet). Wer den Sourcecode haben will: bitte schön, is in C# geschrieben. URL zum ganzen Project: http://sebigronni.se.funpic.de/FileSplit/ Uploaden auf irgendeinen Account kann man ja selbst machen. + Multi-Zitat Zitieren
#17 20. Dezember 2004 Nette Idee, aber was meint ihr wieo noch keiner vor uns darauf gestoßen ist? Ganz einfach, da die mySQl sehr verbunden mit dem RAM eines Server´s ist, das heißt das macht sich sofort bemerkbar auf einen Server wenn da was ist was ewig den RAM klaut. Aber wie gesagt Nice Idea, aber leider nicht umsetzbar........ Denkt weiter nacht vielleicht kommt ja noch der entscheidene Punkt an den wirklich keiner denkt und der nutzbar ist =o] + Multi-Zitat Zitieren
#18 24. Dezember 2004 Hab mal das Script verbessert. Man braucht jetzt nicht mehr die Anzahl Blöcke festlegen. PHP: <? php $rawname = 'archiv.rar' ; //Der ursprüngliche Dateiname $position = 1 ; header ( 'Content-Description: File Transfer' ); header ( 'Content-Type: application/force-download' ); header ( 'Content-Disposition: attachment; filename=' . $rawname ); while( 1 ){ //Endlosschleife if( file_exists ( $rawname . '.' . $position )){ //Wenn Datei existiert readfile ( $rawname . '.' . $position ); //ausgeben }else{ //sonst exit; //nicht } $position ++; } ?> EDIT: Hab mal auf meinem Rechner nen Webserver und PHP installiert und über dieses Script über Netzwerk versucht ne Datei zu ziehen (600MB): Ergebnis: Taskmanager lief die ganze Zeit aber von irgendeinem Speicherfresser hab ich nix mitgekriegt... Also wie es bei ner echten SQL Datenbank is, weiß ich nich, aber wenn man die Dateien direkt ins Dateisystem speichert, dann dürfte niemand etwas merken + Multi-Zitat Zitieren