WebStarter 1.0

Här diskuteras programmering och utveckling
joltgen
Inlägg: 32
Blev medlem: 06 jan 2008, 20:25
OS: Ubuntu
Utgåva: 12.04 Precise Pangolin LTS
Ort: Mölndal

WebStarter 1.0

Inlägg av joltgen »

Hej, jag har gjort ett simpelt program i c++ som i alla fall jag har mycket nytta utav. Programmet är till för att kunna komma igång snabbare med webbprojekt. Det programmet gör är att det skapar en automatisk fil-struktur dvs att det skapar ex. mapparna bilder, style, script osv. Det skapar även en index-fil som är skriven med xhtml och har en länk till en css-fil som även den får lite kod som tex. font, marginal osv.

Bättre förklaring än att testa det finns nog inte så här är koden:

Kod: Markera allt

#include <iostream>
#include <fstream>
#include <string>
#include <sys/stat.h>
#include <sys/types.h>

using namespace std;

int main()
{
	//xhtml-koden till index
	string xhtml = "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"sv-SE\" lang=\"sv-SE\">\n\t<head profile=\"http://www.w3.org/2000/08/w3c-synd/#\">\n\t\t<meta http-equiv=\"Content-Type\" content=\"text/html; charset=iso-8859-1\" />\n\t\t<title>Ny sida</title>\n\t\t<link href=\"style/style.css\" rel=\"stylesheet\" type=\"text/css\" />\n\t</head>\n\n\t<body>\n\t</body>\n</html>";

	//css-koden
	string css = "body {\n\tmargin: 0px;\n\tfont-family: Helvetica, Verdana, Arial, sans-serif;\n\tfont-size: 12px;\n\tcolor: #000000;\n}";

	//Skapar mappar. Förklaring: gfx=grafik, style=css, lib=oophp, inc=filer för inkludering, dbconn=databasanslutning, script=javascript.
	const char *mappar [] = {"gfx", "style", "lib", "inc", "dbconn", "script"};

	int mkdir(const char *pathname, mode_t mode);


	for(int i=0; i< (sizeof(mappar)/sizeof(*mappar)); ++i)
	{
		mkdir(mappar[i], S_IRWXU |  S_IRGRP | S_IXGRP | S_IXOTH | S_IROTH);
	}

	//Skapar och skriver till index
	ofstream index;
	index.open ("index.html");
	index << xhtml << endl;
	index.close();
	
	//Skapar och skriver till css
	ofstream style;
	style.open ("style/style.css");
	style << css << endl;
	style.close();

	return 0;
}

//Gl&HF!
Senast redigerad av 1 joltgen, redigerad totalt 7 gånger.
Användarvisningsbild
gasol
Inlägg: 405
Blev medlem: 27 jul 2007, 14:57
Kontakt:

SV: WebStarter 1.0

Inlägg av gasol »

Nice skoj att du delar med dig av dina program.

Ett tips är att använda int mkdir(const char *pathname, mode_t mode); för att skapa mappar i C / C++ istället för att använda system() eftersom det är lite säkrare, om inte annat då man skulle med en buffer overflow attack kunna injecera strängar i mappar arrayen. Sedan så tycker jag personligen att det är en snyggare lösning att använda system anrop istället för shell program för att sköta filhanteringen.

glöm inte dessa dock!
#include <sys/stat.h>
#include <sys/types.h>
The Black Mountain Scorpion Hoedown Bluegrass Experience Gang
From Left to Right: Wizard on Bicycle, Wizard on Bicycle, Wizard on Bicycle, Wizard on Bicycle, Wizard on Bicycle.
Användarvisningsbild
Smygis
Inlägg: 849
Blev medlem: 21 jun 2006, 18:41
OS: Ubuntu
Utgåva: 24.04 Noble Numbat LTS
Ort: Kramfors

SV: WebStarter 1.0

Inlägg av Smygis »

hade det inte varigt lättare att skriva detta i ett scriptspråk, tex python. Det blir lättare att modifiera det då.

Kod: Markera allt

#!/usr/bin/env python
# coding: UTF-8

import os
import sys

def main():
    try:
        charset = [i for i in sys.argv if i.startswith("charset")][0].split("=")[1]
    except:
        charset = "UTF-8"
    
    try:
        title = [i for i in sys.argv if i.startswith("title")][0].split("=")[1]
    except:
        title = "New page"
        
    for i in folders:
        os.mkdir(i)
    
    index = open("index.xhtml", "w")
    index.write(xhtml % (charset, title))
    index.close()
    
    style = open("style/style.css", "w")
    style.write(css)
    style.close()
    
folders = ["gfx", "style", "lib", "inc", "dbconn", "script"]

# xhtml string, use xhtml % (charset, title)
xhtml = """\
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="sv-SE" lang="sv-SE">
    <head profile="http://www.w3.org/2000/08/w3c-synd/#">
        <meta http-equiv="Content-Type" content="text/html; charset=%s" />
        <title>%s</title>
        <link href="style/style.css" rel="stylesheet" type="text/css" />
    </head>
    
    <body>
    
    </body>
</html>
"""

css = """\
body {
    margin: 0px;
    font-family: Helvetica, Verdana, Arial, sans-serif;
    font-size: 12px;
    color: #000000;
}
"""
if __name__ == "__main__":
    main()
körexempel:
smygis@Bob:~/src/Python/test$ ./untitled.py charset=iso-8859-1 title="Min nya sida"
smygis@Bob:~/src/Python/test$ ls
dbconn  gfx  inc  index.xhtml  lib  script  style  untitled.py
smygis@Bob:~/src/Python/test$ cat index.xhtml
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="sv-SE" lang="sv-SE">
   <head profile="http://www.w3.org/2000/08/w3c-synd/#">
       <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
       <title>Min nya sida</title>
       <link href="style/style.css" rel="stylesheet" type="text/css" />
   </head>
   
   <body>
   
   </body>
</html>
smygis@Bob:~/src/Python/test$

Annars, Snyggt jobbat.
A Foolish Consistency is the Hobgoblin of Little Minds.Beware: In C++, your friends can see your privates!
Användarvisningsbild
gasol
Inlägg: 405
Blev medlem: 27 jul 2007, 14:57
Kontakt:

SV: WebStarter 1.0

Inlägg av gasol »

#!/usr/bin/env python du kör python genom env utan att modifiera miljön, vafför gör h*n på dette visset?
The Black Mountain Scorpion Hoedown Bluegrass Experience Gang
From Left to Right: Wizard on Bicycle, Wizard on Bicycle, Wizard on Bicycle, Wizard on Bicycle, Wizard on Bicycle.
Användarvisningsbild
Smygis
Inlägg: 849
Blev medlem: 21 jun 2006, 18:41
OS: Ubuntu
Utgåva: 24.04 Noble Numbat LTS
Ort: Kramfors

SV: WebStarter 1.0

Inlägg av Smygis »

gasol skrev: #!/usr/bin/env python du kör python genom env utan att modifiera miljön, vafför gör h*n på dette visset?
Har du något speciellt problem med det?

Och vad är så hemskt med att jag är en han?
A Foolish Consistency is the Hobgoblin of Little Minds.Beware: In C++, your friends can see your privates!
Användarvisningsbild
gasol
Inlägg: 405
Blev medlem: 27 jul 2007, 14:57
Kontakt:

SV: WebStarter 1.0

Inlägg av gasol »

Undrade om det var något säkerhetstänkande, typ env -i, ta bort alla enviorment variabler innan scriptet körs eller dylikt...

h*n = hon || han, könsneutralt...
The Black Mountain Scorpion Hoedown Bluegrass Experience Gang
From Left to Right: Wizard on Bicycle, Wizard on Bicycle, Wizard on Bicycle, Wizard on Bicycle, Wizard on Bicycle.
joltgen
Inlägg: 32
Blev medlem: 06 jan 2008, 20:25
OS: Ubuntu
Utgåva: 12.04 Precise Pangolin LTS
Ort: Mölndal

SV: WebStarter 1.0

Inlägg av joltgen »

Tack för tipsen!

Jag fick dock inte riktigt till mkdir().

Försökte bla. såhär...

Kod: Markera allt

int mkdir(const char *pathname, mode_t mode);

mkdir(mappar[i]);
...men det gick inget vidare. Testade att sätta mkdir("test") och då fick jag meddelandet att jag hade för lite argument vilket ser logiskt ut men jag vet inte vad jag skall skicka med mer. Ursäkta min okunnighet :/
Användarvisningsbild
gasol
Inlägg: 405
Blev medlem: 27 jul 2007, 14:57
Kontakt:

SV: WebStarter 1.0

Inlägg av gasol »

mode är egentligen bara tillståndet på mappen som skapar, alltså filtillstånd

mkdir(mappar,  S_IRWXU |  S_IRGRP | S_IXGRP | S_IXOTH | S_IROTH);

kommer att skapa mapparna så att användaren som kör programmet kan öppna / läsa / skriva medans alla andra användare bara kan öppna och läsa mapparna...
The Black Mountain Scorpion Hoedown Bluegrass Experience Gang
From Left to Right: Wizard on Bicycle, Wizard on Bicycle, Wizard on Bicycle, Wizard on Bicycle, Wizard on Bicycle.
joltgen
Inlägg: 32
Blev medlem: 06 jan 2008, 20:25
OS: Ubuntu
Utgåva: 12.04 Precise Pangolin LTS
Ort: Mölndal

SV: WebStarter 1.0

Inlägg av joltgen »

okej tack! Har uppdaterat den nu. Fick lite problem med att få in array-värdena i mkdir() men nu funkar det :)
Användarvisningsbild
gasol
Inlägg: 405
Blev medlem: 27 jul 2007, 14:57
Kontakt:

SV: WebStarter 1.0

Inlägg av gasol »

ah jo, det ska så klart vara mkdir(mappar,  S_IRWXU |  S_IRGRP | S_IXGRP | S_IXOTH | S_IROTH); i ditt program ^_^
The Black Mountain Scorpion Hoedown Bluegrass Experience Gang
From Left to Right: Wizard on Bicycle, Wizard on Bicycle, Wizard on Bicycle, Wizard on Bicycle, Wizard on Bicycle.
joltgen
Inlägg: 32
Blev medlem: 06 jan 2008, 20:25
OS: Ubuntu
Utgåva: 12.04 Precise Pangolin LTS
Ort: Mölndal

SV: WebStarter 1.0

Inlägg av joltgen »

mm, det var data-typen jag fick problem med

Detta:
string mappar [] = {...
blev:
const char *mappar [] = {...

Blev lite intresserad av hur buffer overflow funkar ^^. Får kika på wikipedia.
Användarvisningsbild
gasol
Inlägg: 405
Blev medlem: 27 jul 2007, 14:57
Kontakt:

SV: WebStarter 1.0

Inlägg av gasol »

ah det är sant, C++ wrappar ju sina strängar i string object, du hade kunnat använd c_str attributet också.
The Black Mountain Scorpion Hoedown Bluegrass Experience Gang
From Left to Right: Wizard on Bicycle, Wizard on Bicycle, Wizard on Bicycle, Wizard on Bicycle, Wizard on Bicycle.
joltgen
Inlägg: 32
Blev medlem: 06 jan 2008, 20:25
OS: Ubuntu
Utgåva: 12.04 Precise Pangolin LTS
Ort: Mölndal

SV: WebStarter 1.0

Inlägg av joltgen »

ok
Skriv svar

Återgå till "Programmering och webbdesign"