Avatar billede BTEngineer Novice
13. maj 2006 - 10:26 Der er 39 kommentarer og
1 løsning

Opret CSS fil på serveren

Hej,

Jeg er ved at lave sådan at man kan lave sin egen scrollbar på min side.
Det skal funke på den måde at man skriver farvekoderne som skal bruges til scrollbaren i en FORM, og derefter når formen bliver postet, skal alle farvekoderne tjekkes for at være lovlige, dvs. de skal indeholde #-tegnet og højest 6 cifre derefter osv.

Godt nok, så langt er jeg nået, men jeg ved ikke hvordan jeg skal lave sådan at den "opretter" en css-fil på serveren?
Efter css-filen er blevet oprettet, skal der vises koden til filen, f.eks:
<link rel="stylesheet" type="text/css" href="http://www.minside.dk/scrollbar/cssfiler/$cssname">

Her er scriptet som jeg har lavet indtil videre:
-----------------------------------------------------------------
<html>

<head>

<meta http-equiv="Content-Language" content="da">
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<title> Lav din egen scrollbar! </title>

</head>

<body>

<?
if($_POST[lavdet]) {

$face = $_POST[face];
$highlight = $_POST[highlight];
$dlight = $_POST[dlight];
$darkshadow = $_POST[darkshadow];
$shadow = $_POST[shadow];
$arrow = $_POST[arrow];
$track = $_POST[track];

    if(!preg_match("/^#[0-9a-f]{6}$/i", $face)) {
        echo("Ulovlig farvekode i feltet Face color.");
    }
   
    if(!preg_match("/^#[0-9a-f]{6}$/i", $highlight)) {
        echo("Ulovlig farvekode i feltet Highlight color.");
    }
   
    if(!preg_match("/^#[0-9a-f]{6}$/i", $dlight)) {
        echo("Ulovlig farvekode i feltet 3dlight color.");
    }
   
    if(!preg_match("/^#[0-9a-f]{6}$/i", $darkshadow)) {
        echo("Ulovlig farvekode i feltet Darkshadow color.");
    }
   
    if(!preg_match("/^#[0-9a-f]{6}$/i", $shadow)) {
        echo("Ulovlig farvekode i feltet Shadow color.");
    }
   
    if(!preg_match("/^#[0-9a-f]{6}$/i", $arrow)) {
        echo("Ulovlig farvekode i feltet Arrow color.");
    }
   
    if(!preg_match("/^#[0-9a-f]{6}$/i", $track)) {
        echo("Ulovlig farvekode i feltet Track color.");
    }

}
?>

<form action="index.php" method="POST">

<table border="0" width="100%">
    <tr>
        <td width="167">Face color:</td>
        <td width="808"><input type="text" name="face" size="10" maxlength="7"></td>
    </tr>
    <tr>
        <td width="167">Highlight color:</td>
        <td width="808"><input type="text" name="highlight" size="10" maxlength="7"></td>
    </tr>
    <tr>
        <td width="167">3dlight color:</td>
        <td width="808"><input type="text" name="dlight" size="10" maxlength="7"></td>
    </tr>
    <tr>
        <td width="167">Darkshadow color:</td>
        <td width="808"><input type="text" name="darkshadow" size="10" maxlength="7"></td>
    </tr>
    <tr>
        <td width="167">Shadow color:</td>
        <td width="808"><input type="text" name="shadow" size="10" maxlength="7"></td>
    </tr>
    <tr>
        <td width="167">Arrow color:</td>
        <td width="808"><input type="text" name="arrow" size="10" maxlength="7"></td>
    </tr>
    <tr>
        <td width="167">Track color:</td>
        <td width="808"><input type="text" name="track" size="10" maxlength="7"></td>
    </tr>
</table>

<table border="0" width="100%">
    <tr>
        <td><input type="submit" name="lavdet" value="Lav koden"></td>
    </tr>
</table>

</form>

</body>

</html>
-----------------------------------------------------------------

Jeg håber nogen kan hjælpe mig :-).

// Henrik
Avatar billede jakobdo Ekspert
13. maj 2006 - 11:05 #1
Du kunne jo lave sådan at filen style'en blev gemt i en database.
Så kan hver bruger have sin egen style.
Dog skal den så hentes hver gang.
Logger dine brugere ind?
Hvis ja, så kunne du jo bruge: brugernavn.css
Avatar billede BTEngineer Novice
13. maj 2006 - 11:10 #2
De skal ikke have selve koden, de skal hente fra
<link rel="stylesheet" type="text/css" href="http://www.minside.dk/scrollbar/cssfiler/$cssname">

De logger ikke ind.
Avatar billede jakobdo Ekspert
13. maj 2006 - 11:33 #3
Hvordan ved du så hvem der er hvem?
Så skal du jo evt gemme alle info i en cookie?
Avatar billede fbhzone Nybegynder
13. maj 2006 - 12:59 #4
$fil = fopen("$cssname","w");
fwrite($fil,"indhold af css fil");
fclose($fil);
Avatar billede BTEngineer Novice
13. maj 2006 - 17:50 #5
fbhzone ->
Hvor bliver CSS filen så uploaded :S ?
Avatar billede fbhzone Nybegynder
13. maj 2006 - 17:55 #6
du skal jo tage det output fra før og lave filen på serveren.. ikke uploade
Avatar billede BTEngineer Novice
13. maj 2006 - 18:06 #7
Det forstår jeg ikke :S
Avatar billede BTEngineer Novice
13. maj 2006 - 18:06 #8
Har lavet det sådan her:

$cssname = "time()"-"rand('1,99')";
$fil = fopen("$cssname","cssfiler");
fwrite($fil,"$indhold");
fclose($fil);
Avatar billede BTEngineer Novice
13. maj 2006 - 18:16 #9
Altså css-filen skal jo uploades til FTP-serveren.
Avatar billede olebole Juniormester
13. maj 2006 - 22:22 #10
<ole>

dounie >> Da den jo udskrives på serveren - betyder det så, du først vil downloade den og derefter uploade den igen ... eller ...?!??!!!  =)

Men hvor har du denne linje fra:
    $fil = fopen("$cssname","cssfiler");

Mon ikke du mener:
    $fil = fopen($cssname,"w");

Læs evt. mere her:
    http://dk2.php.net/manual/da/function.fopen.php

/mvh
</bole>
Avatar billede olebole Juniormester
13. maj 2006 - 22:23 #11
- og dette kan jo heller ikke blive til et filnavn:
    $cssname = "time()"-"rand('1,99')";  ;o)
Avatar billede BTEngineer Novice
14. maj 2006 - 13:27 #12
Olebole ->
Det betyder at der skal laves en CSS-FIL med indholdet:

body {
scrollbar-face-color: $face;
scrollbar-highlight-color: $highlight;
scrollbar-3dlight-color: $dlight;
scrollbar-darkshadow-color: $darkshadow;
scrollbar-shadow-color: $shadow;
scrollbar-arrow-color: $arrow;
scrollbar-track-color: $track;
}

Navnet på filen skal være time()- et eller andet, bare sådan de ikke kommer til at have det samme navn, ligemeget hvor mange der opretter på sammetid.
Filen skal selvfølgelig ikke bare være en normal tekst-fil, men en CSS fil.
Det skal fungere på den måde at brugeren skriver farverne til den ønskede scrollbar i formen, og derefter trykke på "LAV DEN!", så skal mit system uploaded en fil med det brugeren har valgt som farve i scrollbaren, og efter filen er uplaoded skal brugeren modtage en kode i en evt. textarea- boks. Altså koden:
<link rel="stylesheet" type="text/css" href="http://www.minside.dk/scrollbar/cssfiler/NAVNET_PÅ_CSS_FILEN.css">

Håber i ved hvad jeg snakker om nu :).
Avatar billede olebole Juniormester
14. maj 2006 - 15:28 #13
Inden du nu giver filen et forkert navn, skulle du tage og prøve med det eksempel 'fbhzone' gav dig ... det fungerer helt efter planen.

Udover at fopen's andet argument skal være "w", når der skal skrives til filen, kan dette jo aldrig resultere i et filnavn:
    $cssname = "time()"-"rand('1,99')";

- hvad er filens extension? Desuden er det skidt kodeskik at lade filnavne begynde med et tal (det giver ofte problemer) ... og så har koden intet med PHP at gøre. Skal det i nærheden af noget, der kan bruges bør der stå:
    $cssname = "css".time()."-".rand(1,99).".css";

- og da PHP's 'rand' er ret elendig, bør du i stedet skrive'mt_rand', der fungerer langt bedre. Koden kommer derfor til at ud noget à la:

$cssname = "css".time()."-".rand(1,99).".css";
$fil = fopen("cssname,"w");
fwrite($fil, "indhold af css fil");
fclose($fil);

- hvor strengen "indhold af css fil" repræsenterer en streng, der består af dit CSS-indhold.
Avatar billede olebole Juniormester
14. maj 2006 - 15:31 #14
Derudover skal du være opmærksom på, at de viste scrollbar-styles ikke vil virke i et dokument, hvor CSS-standarden overholdes. I et sådan skal de lægges på dokument-elementet:

html {
scrollbar-face-color: $face;
scrollbar-highlight-color: $highlight;
scrollbar-3dlight-color: $dlight;
scrollbar-darkshadow-color: $darkshadow;
scrollbar-shadow-color: $shadow;
scrollbar-arrow-color: $arrow;
scrollbar-track-color: $track;
}

Det er med andre ord kun i et dokument med dårlig kode, dit eksempel vil virke. I et ordentligt dokument vil din kode ikke ændre scrollbarens farver ... heller ikke i IE  ;o)
Avatar billede olebole Juniormester
14. maj 2006 - 15:33 #15
PS: Det er ganske formålstjenligt selv at lære at kode, før man tilbyder andre at lave deres koder ... ellers er man ikke til megen hjælp  =)
Avatar billede BTEngineer Novice
14. maj 2006 - 19:23 #16
$cssname = "css".time()."-".rand(1,99).".css";
$fil = fopen("cssname,"w");
fwrite($fil, "indhold af css fil");
fclose($fil);

Hvor bliver CSS-filen så uploaded :S ?
Avatar billede jakobdo Ekspert
14. maj 2006 - 19:51 #17
Den bliver uploaded til navnet: $cssname
Der kan du jo evt angive en sti også.
Avatar billede BTEngineer Novice
18. maj 2006 - 17:34 #18
Det virker :).
Men hvordan sletter jeg så css-filen fra serveren igen?
Har prøvet at bruge funktionen unlink(), men det virkede ikke.
Avatar billede jakobdo Ekspert
19. maj 2006 - 08:27 #19
Når du bruger unlink() har du så den fulde sti eller "bare" unlink('style.css');
Prøv evt med fuld sti, ala: /var/www/noget/andet/dinside/htdocs/
Avatar billede BTEngineer Novice
19. maj 2006 - 14:30 #20
Hmm,
stien er sku rigtig nok, den går direkte til css-filen.
http://www.minside.dk/cssfiler/dounie1148041390-Dounie.css
Avatar billede BTEngineer Novice
19. maj 2006 - 14:31 #21
Jeg får følgende fejl:
Warning: unlink(http://www.minside.dk/cssfiler/dounie1148041390-Dounie.css): No such file or directory in /var/www/web2/html/brugere/rediger_scroll.php on line 83
Avatar billede jakobdo Ekspert
19. maj 2006 - 15:11 #22
unlink('/var/www/web2/html/brugere/cssfiler/dounie1148041390-Dounie.css');
Du skal ikke bruge http://....
Avatar billede BTEngineer Novice
19. maj 2006 - 16:07 #23
Det virker stadig ikke.
unlink('/var/www/web2/html/brugere/cssfiler/$_GET[name]');
$_GET[name] er ligmed navnet på cssfilen.
Avatar billede jakobdo Ekspert
19. maj 2006 - 16:13 #24
Hvem ejer css-filen?
Og din måde:
unlink('/var/www/web2/html/brugere/cssfiler/$_GET[name]');
er lidt farlig.
Avatar billede BTEngineer Novice
19. maj 2006 - 16:16 #25
Nej det er den ikke, for andre kan ikke slette andres css-filer, det har jeg styr på.
hvem der ejer den? hvad mener du :)?
Avatar billede jakobdo Ekspert
19. maj 2006 - 18:02 #26
Prøv at læg en test fil i diret: cssfiler/ og put dette kode i:

<?php
echo getcwd();
echo '<br />';
echo substr(sprintf('%o', fileperms('dounie1148041390-Dounie.css')), -4);
?>
Avatar billede BTEngineer Novice
20. maj 2006 - 23:04 #27
test filen siger:
/var/www/web2/html/brugere/cssfiler
0644
Avatar billede BTEngineer Novice
22. maj 2006 - 16:49 #28
Kom med noget respons :/
Avatar billede jakobdo Ekspert
22. maj 2006 - 17:55 #29
Jeg ved desværre ikke hvad problemet kan være.
Kunne forstille mig det er nogle rettigheder.
php har nok ikke rettigheder nok til at slette filen.
Du kan jo evt teste lidt videre.
Prøv at chmod filen til 777 og kør så unlink().
Avatar billede olebole Juniormester
22. maj 2006 - 18:29 #30
Jeg har været udefor noget lignende på en andens webhotel engang ... noget med safemode - men husker ikke præcist, hvad.
I hvertfald betød det, at det script (den fil), der havde oprettet filen, 'ejede' den og var derfor den eneste, der kunne slette den - det lod sig endikke gøre via FTP. Mon ikke også det var det, jakobdo henviste til tidligere i tråden?
Avatar billede BTEngineer Novice
25. maj 2006 - 10:33 #31
Hmm..
Jeg har fået den til at slette CSS-filen på serveren, men den kommer stadig med en fejlmeddelse:
Warning: unlink(/var/www/web2/html/brugere/cssfiler/$cssname): No such file or directory in /var/www/web2/html/brugere/rediger_scroll.php on line 137

Det ser således ud på linje 137:
unlink('/var/www/web2/html/brugere/cssfiler/$cssname');
$cssname er ligmed bruger1148545661-dounie.css
Avatar billede jakobdo Ekspert
25. maj 2006 - 10:34 #32
Fejlen: No such file or directory in siger vel næsten sig selv! :o)
Avatar billede BTEngineer Novice
25. maj 2006 - 10:39 #33
okay.
hvad skal jeg så gøre for at få den rettet?
Avatar billede jakobdo Ekspert
25. maj 2006 - 10:41 #34
Du er sikker på filen rent faktisk er der?
Du kunne jo evt tjekke om filen er der, inden den slettes med file_exists()
Avatar billede BTEngineer Novice
25. maj 2006 - 10:53 #35
Jeg er sikker på at filen er der.. kan jeg se på ftpen?
Avatar billede jakobdo Ekspert
25. maj 2006 - 10:54 #36
Og stien er helt korrekt?
Fejlen siger jo netop filen eller diret ikke kunne findes.
Avatar billede BTEngineer Novice
25. maj 2006 - 10:59 #37
Har lige testet med funktionen file_exists(), og den kan ikke finde stien.
Forstår ikke hvad der er galt, jeg kan hente filen hvis jeg får ind på www.minside.dk/brugere/cssfiler/$cssname
Avatar billede jakobdo Ekspert
25. maj 2006 - 11:20 #38
Prøv lige at fang mig på msn: jakobdo {at] hotmail [dot} com
Avatar billede jakobdo Ekspert
25. maj 2006 - 12:18 #39
Der er forskel på: 'path/$cssname' og "path/$cssname" :o)
Og et svar.
Avatar billede jakobdo Ekspert
25. maj 2006 - 16:58 #40
Takker for point.
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