Avatar billede fixbabe Nybegynder
20. juni 2006 - 17:07 Der er 33 kommentarer og
1 løsning

Pak, flyt og slet fil

Hej jeg har kigge lidt på ekp efter nogen spm's som kunne hjælpe men syntes ikke der er nogen så nu prøver jeg at oprette et spm herom.

Jeg søger et script der finder filer i mappen /home/filer/mappe pakkerfilerne og flytter dem til mappen /home/filer/download

Scriptet behøver ikke pakke alle filer inden den flytter dem.
Script vil blive kørt som cronjob på et bestemt tidspunkt.
Avatar billede jakobdo Ekspert
20. juni 2006 - 17:45 #1
Hvis du kan køre det som cronjob, så tror jeg du skal kigge på shellscript.
Der fyrer du bare kommandoer afsted.
Som f.eks.
tar cvzf minfil.tgz /home/filer/mappe/
mv minfil.tgz /home/filer/download/

Det bliver så pakket i tar/gzip.
Avatar billede fixbabe Nybegynder
20. juni 2006 - 17:50 #2
de skal pakkes i hver deres zip fil ikke i en stor
Avatar billede jakobdo Ekspert
20. juni 2006 - 17:55 #3
Så skal du kigge på kommandoen: zip (og om det overhovedet er installeret på din server)
Avatar billede fixbabe Nybegynder
20. juni 2006 - 19:39 #4
Dette er hvad jeg selv har kogt sammen indtil nu:

<?php
//Mappe hvor filerne overføres til
$dirto = 'download';

//Åbner mappen hvor de rå filer ligger
$handle = opendir('demo/');

while (false !== ($file = readdir($handle))) {
//Lister filer i start mappen
if ($file != '.' && $file != '..') {

include("zip.lib.php");
$demonavn = $file;

$filename = "demo/".$file."";

//Indhold af zip filen
$readme="visit www.loooool.dk";

//Pas?
$f=FOpen($filename,"r");
$data = fread ($f, filesize ($filename));
FClose($f);
$zipfile = new zipfile();

//Tilføjer filer til zip filen
$zipfile -> addFile($data, "Demo.dem");
$zipfile -> addFile($readme, "README.txt");

//Pas?
header('Content-disposition: filename=".$file.".zip');

//Pas?
echo $zipfile -> file();

//Hvad den nye fil skal hedde
$newfile = ''.$dirto.'/'.$file.'.zip';

//Tjekker om copiering fejler
if (!copy($file, $newfile)) {
  echo "failed to copy $file...\n<br>";
}
//Lister filerne
        echo $file.'<br>';
    }
}
//Lukker
closedir($handle);
?>

Får denne fejl: Fatal error: Call to undefined function: gzcompress() in /server/www/bookhltv.dk/test/zip.lib.php on line 112


I forbindelse med et pakke scritp bruger jeg del af samem script og der virker det:
<?php

if (isset($_GET['type'])) {

if (file_exists('system/hltv/'.$_GET['type'].'/'.$_GET['get'])) {


include("zip.lib.php");
$demonavn = "".$_GET['get']."";

$filename="system/hltv/".$_GET['type']."/".$_GET['get']."";
$readme="hey";


$f=FOpen($filename,"r");
$data = fread ($f, filesize ($filename));
FClose($f);
$zipfile = new zipfile();

$zipfile -> addFile($data, "Demo.dem");

$zipfile -> addFile($readme, "README.txt");

header('Content-disposition: filename=demo.zip');

echo $zipfile -> file();
}
}
?>

Hvor er min fejl i scriptet siden jeg får den fejl?
Avatar billede jakobdo Ekspert
20. juni 2006 - 20:22 #5
Fejlen er jo:
Får denne fejl: Fatal error: Call to undefined function: gzcompress() in /server/www/bookhltv.dk/test/zip.lib.php on line 112

funktionen: gzcompress() kaldes på linie 112 i filen: zip.lib.php
Det kan være du ikke har zlib enabled på din installation.
Avatar billede fixbabe Nybegynder
20. juni 2006 - 20:40 #6
Men det virker i andet script på samme server?
Avatar billede fixbabe Nybegynder
20. juni 2006 - 20:41 #7
Hvordan aktivere jeg det ?
Avatar billede jakobdo Ekspert
20. juni 2006 - 20:59 #8
Jeg må tilstå jeg har ingen ide! :o(

Men måske du kan finde en løsning her: http://dk2.php.net/zlib
Avatar billede smirnoff Nybegynder
21. juni 2006 - 17:53 #9
Er du helt sikker på det kører på serveren - hvad siger phpinfo(); ??
Avatar billede fixbabe Nybegynder
21. juni 2006 - 18:03 #10
kan ikke finde noget zlib ved phpinfo();
Avatar billede fixbabe Nybegynder
21. juni 2006 - 18:26 #11
Jeg smider apache 1,3 på nogen forslag til install ?
Avatar billede fixbabe Nybegynder
21. juni 2006 - 19:27 #12
Så kan vi komme vidre
Det virker nu, altså ikke scriptet som det skal men serveren :)
Her kan det ses http://www.bookhltv.dk/test/test.php

Scriptet skal som sagt finde fil -> pakke den -> flytte til ny mappe -> Slette den gamle fil
Avatar billede fixbabe Nybegynder
24. juni 2006 - 11:53 #13
En der gider hjælpe? jeg har virkelig brug for hjælp her.
Avatar billede jakobdo Ekspert
24. juni 2006 - 12:01 #14
Har du fået noget zip program på serveren?
Avatar billede fixbabe Nybegynder
24. juni 2006 - 12:22 #15
Ja det virker nu, den åbner/sender bare filen når jeg kører scriptet istedet for at gemme den.
Avatar billede jakobdo Ekspert
24. juni 2006 - 12:37 #16
Hvis du fjerner:

header('Content-disposition: filename=demo.zip');

echo $zipfile -> file();

Så tror jeg du kan gemme $zipfile-> file(); via: fopen() og fwrite()
Avatar billede fixbabe Nybegynder
26. juni 2006 - 16:13 #17
Jeg er ikke helt med på fopen og fwrite men dette er hvad jeg har kogt det ned til:

<?php
include("zip.lib.php");

$handle = opendir('demo/');
while (false !== ($file = readdir($handle))) {
    if ($file != '.' && $file != '..') {

//Opretter zip filen
$readme="Book your own free HLTV @ www.BookHLTV.dk";
$linkhp="[InternetShortcut]\nURL=http://www.bookhltv.dk/\nModified=50CE24B40B67C6012F";

$f=FOpen($filename,"r");
$data = fread ($f, filesize ($filename));
FClose($f);

$zipfile = new zipfile();

$zipfile -> addFile($data, "BookHTLV demo.dem");
$zipfile -> addFile($readme, "README.txt");
$zipfile -> addFile($linkhp, "BookHLTV.dk.url");

//filen som skal pakkes
$filename = "demo/".$file."";

//filen pakket
$newfile = $zipfile -> file();

//filen pakket som skal flyttes
$new = "zipet/".$newfile."";

//Tjekker om copiering fejler
if (!copy($filename, $new)) {
  echo "Fejl<br>";
}
unlink( $filename );
}
}
closedir($handle);
?>
Avatar billede jakobdo Ekspert
26. juni 2006 - 17:08 #18
Virker det nu eller?
Avatar billede fixbabe Nybegynder
26. juni 2006 - 17:17 #19
Kopi delen "virker" men jeg får ikke nogen brugbar zip fil at arbejde med.. kan ske jeg har grebet det forkert an?
Avatar billede jakobdo Ekspert
26. juni 2006 - 17:59 #20
Prøv denne kode:

<?php
include("zip.lib.php");

$demoDir = 'demo/';
$demos = glob($demoDir . '*.dem');

//Opretter readme og link
$readme="Book your own free HLTV @ www.BookHLTV.dk";
$linkhp="[InternetShortcut]\nURL=http://www.bookhltv.dk/\nModified=50CE24B40B67C6012F";

foreach($demos as $demo)
{
    //Opretter zip filen
    $zipfile = new zipfile();
   
    //Læser indholdet af demoen
    $data = file_get_contents($demo);

    //Tilføjer filerne
    $zipfile -> addFile($data, "BookHTLV demo.dem");
    $zipfile -> addFile($readme, "README.txt");
    $zipfile -> addFile($linkhp, "BookHLTV.dk.url");

    //Zipfilen "læses" ind i newfile
    $newfile = $zipfile -> file();

    //filen pakket som skal flyttes
    if(file_put_contents("zipet/" basename($demo) . ".zip",$newfile)>0)
    {
        echo "Alt gik godt";
        //Vi kan vel slette demo-filen nu?
    }
    else
    {
        echo "Der opstod en fejl";
    }
}
?>
Avatar billede fixbabe Nybegynder
26. juni 2006 - 18:07 #21
hmm Der sker intet fen flytter ikke filerne eller noget
Avatar billede jakobdo Ekspert
26. juni 2006 - 21:36 #22
Prøv at debug! :o)
Avatar billede fixbabe Nybegynder
26. juni 2006 - 21:45 #23
debug(); ? nej vel? :)
Avatar billede jakobdo Ekspert
26. juni 2006 - 21:48 #24
Debug, er at du udskriver variabler, tester om alle funktioner virker som de skal osv.
Avatar billede fixbabe Nybegynder
26. juni 2006 - 21:57 #25
hvis jeg fjerner dette:

foreach($demos as $demo)
{
    //Opretter zip filen
    $zipfile = new zipfile();
   
    //Læser indholdet af demoen
    $data = file_get_contents($demo);

    //Tilføjer filerne
    $zipfile -> addFile($data, "BookHTLV demo.dem");
    $zipfile -> addFile($readme, "README.txt");
    $zipfile -> addFile($linkhp, "BookHLTV.dk.url");

    //Zipfilen "læses" ind i newfile
    $newfile = $zipfile -> file();

    //filen pakket som skal flyttes
    if(file_put_contents("zipet/" basename($demo) . ".zip",$newfile)>0)
    {
        echo "Alt gik godt";
        //Vi kan vel slette demo-filen nu?
    }
    else
    {
        echo "Der opstod en fejl";
    }
}


Udskriver den variablerne, men hvorfor den ikke vil når det er med er mig en gåde.
Avatar billede jakobdo Ekspert
26. juni 2006 - 22:11 #26
Prøv f.eks. inden foreach() at lav:

echo '<pre>';
print_r($demos);
echo '</pre>';
Avatar billede fixbabe Nybegynder
27. juni 2006 - 16:02 #27
$linkhp="[InternetShortcut]\nURL=http://www.bookhltv.dk/\nModified=50CE24B40B67C6012F";

echo '<pre>';
print_r($demos);
echo '</pre>';

foreach($demos as $demo)

Sker intet, sker der noget når du kører den ?
Avatar billede jakobdo Ekspert
27. juni 2006 - 18:07 #28
fixbabe: Kan jeg kontakte dig via MSN?
Avatar billede fixbabe Nybegynder
27. juni 2006 - 18:51 #29
Ja gerne :)
fex@gamedelux.net
Avatar billede fixbabe Nybegynder
30. juni 2006 - 14:45 #30
Jeg lukker spm her da jeg har fundet en løsning. Det er godt nok ikke i php men i unix scriptet ser således ud.

INPUTDIR="/server/www/siden.dk/hltv/cstrike"
OUTPUTDIR="/server/www/siden.dk/demo/cstrike"

for a in `ls $INPUTDIR`; do

zip $OUTPUTDIR/$a.zip $INPUTDIR/$a

done
rm $INPUTDIR/$a*

Forklaring:
<- start ->
INPUTDIR="/server/www/siden.dk/hltv/cstrike" <- hvor demoen skal hentes fra
OUTPUTDIR="/server/www/siden.dk/demo/cstrike" <- hvor demoen skal hen

for a in `ls $INPUTDIR`; do <- læser start mappen

zip $OUTPUTDIR/$a.zip $INPUTDIR/$a <- zipper filen

done <- afslutter
rm $INPUTDIR/$a* <- sletter filen fra start mappen
<- Slut ->

Bemærk dette script kan ikke pakke filer hvor fil navnet indeholder mellemrum!

Tak til Sjap som lavede det og en tak til jakobdo, og hvis jakodbo hvis du gider smide et svar så får du points som tak for hjælpen :)
Avatar billede jakobdo Ekspert
30. juni 2006 - 15:04 #31
Svar!
Avatar billede fixbabe Nybegynder
30. juni 2006 - 15:33 #32
Tak :)
Avatar billede jakobdo Ekspert
02. juli 2006 - 11:47 #33
Takker for point.
Avatar billede fixbabe Nybegynder
02. juli 2006 - 12:12 #34
Tak for hjælpen, dejligt at du gad :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester