[php] Logfile openen, lezen, versturen, legen (opnieuw)

Pagina: 1
Acties:
  • 862 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Nibbz
  • Registratie: September 2001
  • Laatst online: 12:03

Nibbz

Postmaster General

Topicstarter
Ik heb hier een logfile: face_state.txt
Dit bestand wil ik inlezen, kijken wat erin staat, en de nodige informatie doorsturen naar onze database. En als dat allemaal gedaan is, moet de logfile leeggemaakt worden, en na 5 seconden weer opnieuw beginnen.

Kan zelf eigenlijk niet echt code schrijven, maar wel lezen (net zoals mijn duits :p).. snap de code dus wel.. alleen heb 2 problemen..

De database kan helemaal niet worden bereikt (ik wil verbinden met een externe db.. dat moet toch wel kunnen?).
Het bestand word niet uitgelezen. Want als ik dit uit wil voeren, gaat hij op zijn bek bij het stuk

code:
1
2
$fp = fopen('face.txt','r');
if (!$fp) {echo 'ERROR: Unable to open file.</table></body></html>'; exit;}


Hier gaat hij de html pagina al afsluiten, wat rare tekens op het scherm tovert.

Dus, hoe kan ik een verbinding maken met een externe database?
En.. waarom kan ik met fopen niet lokaal een bestand openen?

Wat ik zelf al heb gezocht:
  • Om het probleem te omzeilen, zat ik te denken aan een sync programma, die mijn map lokaal sync met een ftp map. Probleem is alleen, dat hiermee het bestandje niet leeggemaakt wordt.. wat wel essentieel is.
  • Geprobeerd een FTP transfer in een php bestand te zetten, wat.. openende, inlas, verstuurde en leegmaakte.. alleen dit kreeg ik ook niet voor elkaar.
  • Verschillende script sites bezocht om te kijken of er iets anders bij zat.. geen resultaat
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
<html>
<head>

<script language="JavaScript">

// Verander hier de tijd dat er refreshed moet worden ( in seconden )
var refreshinterval=5

// Wil je de refresh in je statusbalk zichtbaar ? ( yes of no )
var displaycountdown="no"


var starttime
var nowtime
var reloadseconds=0
var secondssinceloaded=0

function starttime() {
        starttime=new Date()
        starttime=starttime.getTime()
    countdown()
}

function countdown() {
        nowtime= new Date()
        nowtime=nowtime.getTime()
        secondssinceloaded=(nowtime-starttime)/1000
        reloadseconds=Math.round(refreshinterval-secondssinceloaded)
        if (refreshinterval>=secondssinceloaded) {
        var timer=setTimeout("countdown()",1000)
                if (displaycountdown=="yes") {
                        window.status="Page refreshing in "+reloadseconds+ " seconds"
                }
    }
    else {
        clearTimeout(timer)
                window.location.reload(true)
    }
}
window.onload=starttime
</script>

<? 
</head>
<body>
// Database connectie 

define("MYSQL_USER","*****[s][/s]");//usernaam
define("MYSQL_PASSWORD","*******");//passwoord
define("MYSQL_SERVER","www.mimizu.nl");//het server adres
define("MYSQL_DATABASE","mimizu_nl_-_yourmood");//database 

function connecttodatabase(){
  if (!$databaseLink = mysql_connect(MYSQL_SERVER, MYSQL_USER, MYSQL_PASSWORD)) {// connectie parameters uit de include file
      return false;
  }
  if (!mysql_select_db(MYSQL_DATABASE, $databaseLink)) {
      return false;
  }
      return $databaseLink; //we arrive at this point if connection is made, and database is selected!
}//end databaseverbinding function 


if(!$link = connecttodatabase() ){
        echo '&r=0&b='.urlencode('Er kon geen verbinding met de database gemaakt worden, pas de database connectie parameters aan in '.$_SERVER['PHP_SELF']).'&';
        exit;
} 
    
$mode = isset($_REQUEST['m']) ? $_REQUEST['m'] : NULL;



//Hier begint het stuk van het bestand uitlezen

function cutline($filename,$line_no=-1) {

$strip_return=FALSE;

$data=file($filename);
$pipe=fopen($filename,'w');
$size=count($data);

if($line_no==-1) $skip=$size-1;
else $skip=$line_no-1;

for($line=0;$line<$size;$line++)
if($line!=$skip)
fputs($pipe,$data[$line]);
else
$strip_return=TRUE;

return $strip_return;
} 

$fp = fopen('face_state.txt','r');
if (!$fp) {echo 'ERROR: Unable to open file.</table></body></html>'; exit;}

while (!feof($fp)) {
$line = fgets($fp, 1024); //use 2048 if very long lines
 list ($field1, $field2, $field3, $field4, $field5, $field6) = split (' ', $line);
$afkappositie = strpos($field2," ",12); 
$tekst = substr($field2,13,50);
//echo '_'.$tekst.'-';
$afkorting = substr($tekst,0,3);
//echo $afkorting;
if ($afkorting=="Hap")
{mysql_query ("INSERT INTO tblEmoties (Emotie, Tijdstip) VALUES ('1', '".time()."')");}
if ($afkorting=="Sad")
{mysql_query ("INSERT INTO tblEmoties (Emotie, Tijdstip) VALUES ('2', '".time()."')");}
if ($afkorting=="Ang")
{mysql_query ("INSERT INTO tblEmoties (Emotie, Tijdstip) VALUES ('5', '".time()."')");}
if ($afkorting=="Sur")
{mysql_query ("INSERT INTO tblEmoties (Emotie, Tijdstip) VALUES ('6', '".time()."')");}
if ($afkorting=="Sca")
{mysql_query ("INSERT INTO tblEmoties (Emotie, Tijdstip) VALUES ('4', '".time()."')");}
if ($afkorting=="Dis")
{mysql_query ("INSERT INTO tblEmoties (Emotie, Tijdstip) VALUES ('3', '".time()."')");}






cutline('face_state.txt',1); // 

$fp++;
}
 
fclose($fp);
 
?>

</body>
</html>


edit: overgens werkte de code wel, op de webserver zelf. Probleem is alleen dat de logfile alleen maar lokaal kan staan. Die moet dus lokaal -> internet.

13:37


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • mithras
  • Registratie: Maart 2003
  • Niet online
Php staat op de server, tenzij je het als client hebt geinstalleerd (wat bij een gemiddelde computergebruiker en websitebezoeker een kans is van 1 op 100.000 denk ik).

De enige mogelijkheid is het bestand uploaden (via post en php, dat kan) en het daar uitlezen. Je kan wel wat met javascript frutselen, maar ik weet niet in hoeverre javascript een lokaal bestand kan leegmaken.
Tot slot heb je nog de mogelijkheid tot een java applet. Die kunnen veel meer. Maar zomaar met php (op de server) een lokaal bestand (bij de client) aanpassen: dat gaat niet lukken ;)

Acties:
  • 0 Henk 'm!

  • pjonk
  • Registratie: November 2000
  • Laatst online: 20-09 21:53
mithras schreef op donderdag 10 januari 2008 @ 13:42:
maar ik weet niet in hoeverre javascript een lokaal bestand kan leegmaken.
JavaScript kan geen lokale bestanden benaderen en anders moesten we ons erg veel zorgen gaan maken over veiligheid op het web.

[ Voor 0% gewijzigd door pjonk op 10-01-2008 16:08 . Reden: typo ]

It’s nice to be important but it’s more important to be nice


Acties:
  • 0 Henk 'm!

  • mithras
  • Registratie: Maart 2003
  • Niet online
pjonk schreef op donderdag 10 januari 2008 @ 16:07:
[...]

JavaScript kan geen lokale bestanden benaderen en anders moesten we ons erg veel zorgen gaan maken over veiligheid op het web.
Uiteraard ga ik er vanuit dat standaard javascript in een (soort van) sandbox draait. Ik ben echter geen pro, dus weet niet in hoeverre javascript ook buiten die sandbox te gebruiken valt.

Gelukkig dat het zo is, maar ik kan me voorstellen dat het ook anders te maken valt :)

Acties:
  • 0 Henk 'm!

  • creator1988
  • Registratie: Januari 2007
  • Laatst online: 08:50
Ik weet niet of het kan in PHP maar ik neem aan dat het wel mogelijk zal moeten zijn:

1. Men neme een client applicatie (.Net, Java, PHP standalone editie (of hoe je zoiets ook zal noemen) o.i.d.) die elke 5 seconde het bestandje laadt, verwerkt en leeggooit.

2. Men neme een webservice op de server. die een method heeft om informatie weg te schrijven naar de database.

Met SOAP stuur je het log bestand naar de webservice vanaf de client.

Acties:
  • 0 Henk 'm!

  • FragFrog
  • Registratie: September 2001
  • Laatst online: 09:34
Nibbz schreef op donderdag 10 januari 2008 @ 11:24:
Dus, hoe kan ik een verbinding maken met een externe database?
En.. waarom kan ik met fopen niet lokaal een bestand openen?
1. Door het url van de database in je connection call te zetten, de database van buitenaf bereikbaar te maken (in MySQL moet je daarvoor in ieder geval een user toevoegen met als host jou ip of een wildcard).

2. Een PHP bestand op de server kan nooit een bestand op jou pc lezen, dit zou, zoals gezegd, inherrent onveilig zijn. Wat je wel kan doen is lokaal een webserver draaien, het bestand inlezen en vervolgens de gegevens naar een externe databaseserver sturen. Dit zou ook prima moeten werken, dus als dat bij jou niet zo is heb je hoogstwaarschijnlijk of save mode aan, of staat het pad verkeerd.

Een scriptje wat jou bestand automatisch verstuurt naar de webserver via een FTP verbinding zou ook prima goed moeten gaan, vervolgens kun je met unlink / fwrite ook het bestand wel leeggooien.

[ Site ] [ twitch ] [ jijbuis ]


Acties:
  • 0 Henk 'm!

  • Gomez12
  • Registratie: Maart 2001
  • Laatst online: 17-10-2023
Of gewoon een externe app maken die de logfile uitleest en dan via post-parameters doorgeeft aan een internet pagina ( wat weer een php-progje is wat uit de post-headers weer 1 bestand maakt )

Acties:
  • 0 Henk 'm!

  • Nibbz
  • Registratie: September 2001
  • Laatst online: 12:03

Nibbz

Postmaster General

Topicstarter
Ik was zelf even een paar dagen weg :p... vandaar dat ik nu pas reageer :p..

maar thnx voor de reacties.. kzal er even verder op ingaan :p

Ik ben nu aan het proberen om vanaf met laptop, met mysqlconnect verbinding te maken met mimizu (193.138.157.32)..

alleen dan krijg ik

code:
1
2
Warning: mysql_connect() [function.mysql-connect]: Host '145.74.181.11' is not allowed to connect to this MySQL server in C:\xampp\htdocs\test.php on line 54
&r=0&b=Er+kon+geen+verbinding+met+de+database+gemaakt+worden%2C+pas+de+database+connectie+parameters+aan+in+%2Ftest.php&


nou dat snap ik.

Dus ik ben naar het admin gedeelte gegaan van mimizu, om te kijken of ik daar een gebruiker kon aanmaken, en die een wildcard kan geven bij z'n IP adres.

Probleem is, we zitten bij Digitalus.. en ik kan daar geen extra mysql gebruikers aanmaken. Dus denk dat dat verhaal een beetje opgaat.

dus ben bang dat dit niks meer gaat worden, connecten naar de online DB @ mimizu.

Het andere probleem, was dat ik lokaal, met fopen, een txt bestand NIET kon oproepen. Dit heb ik ook online geprobeerd (dus, de .php online, en de .txt online), dat gaat prima. Alleen zodra ik het lokaal probeer (dus .php lokaal, en .txt file lokaal).

Ik ga even op zoek naar Soap.. kijken of ik daar wat mee kan..

want opzich

TXT -> [soap] -> server -> inlezen -> leeggooien -> bij begin beginnen

weet niet of iemand mij hier mee op weg kan helpen?

edit: moet het eigenlijk scheiden..


Lokaal:
TXT -> [SOAP] -> stuurt naar server -> legen | om de 5 seconden (dit had ik met ftp geprobeerd.. maar de scripts die ik vond, werkten met een 'browse' manier, die van mij moet dat niet hebben, altijd hetzelfde bestand.

Server:
Bestand is verstuurd.. staat op de ftp -> php leest txt uit -> db

[ Voor 10% gewijzigd door Nibbz op 14-01-2008 12:56 ]

13:37


Acties:
  • 0 Henk 'm!

  • ColdFushion
  • Registratie: Januari 2008
  • Laatst online: 16-12-2024
Als ik jou was zou ik lokaal een Wamp of Xampp server installeren.
Daar laat je het script lopen die om de 5 minuten de log file uit leest.
De gegevens die je vervolgens naar de server wilt versturen kan je dan door middel van POST of GET naar de server sturen. Deze hoeft het alleen nog maar uit te lezen en in de DB te zetten.

Acties:
  • 0 Henk 'm!

  • Nibbz
  • Registratie: September 2001
  • Laatst online: 12:03

Nibbz

Postmaster General

Topicstarter
ColdFushion schreef op maandag 14 januari 2008 @ 13:30:
Als ik jou was zou ik lokaal een Wamp of Xampp server installeren.
Daar laat je het script lopen die om de 5 minuten de log file uit leest.
De gegevens die je vervolgens naar de server wilt versturen kan je dan door middel van POST of GET naar de server sturen. Deze hoeft het alleen nog maar uit te lezen en in de DB te zetten.
Ik draai ook lokaal een wamp server, anders kan ik niet eens php gebruiken om uberhaubt dat bestand uit te lezen :o...

heb alleen zelf totaal geen ervaring met post of get.. daarom leek een ftp-scriptje mij makkelijker. (lezen, versturen, legen). Maar ik kan dus geen goed ftp script vinden om te 'verbouwen'..

13:37


Acties:
  • 0 Henk 'm!

  • Crayne
  • Registratie: Januari 2002
  • Laatst online: 17-03 13:41

Crayne

Have face, will travel

Nibbz schreef op maandag 14 januari 2008 @ 14:06:
[...]
heb alleen zelf totaal geen ervaring met post of get.. daarom leek een ftp-scriptje mij makkelijker. (lezen, versturen, legen). Maar ik kan dus geen goed ftp script vinden om te 'verbouwen'..
Zou je dan niet eens eerst een paar tutorials gaan volgen voor je dit verder uit probeert te pluizen? Zo lijkt het er op dat je nergens gaat komen.

Zet nou eerst eens op papier wat je precies wilt dat er gebeurt en bedenk dan eens hoe je dat stap voor stap op kunt lossen. Het uitlezen van het logfile werkt al, mooi. Nu de rest nog.

Mijn Library Thing catalogus


Acties:
  • 0 Henk 'm!

  • Nibbz
  • Registratie: September 2001
  • Laatst online: 12:03

Nibbz

Postmaster General

Topicstarter
Crayne schreef op maandag 14 januari 2008 @ 14:31:
[...]


Zou je dan niet eens eerst een paar tutorials gaan volgen voor je dit verder uit probeert te pluizen? Zo lijkt het er op dat je nergens gaat komen.

Zet nou eerst eens op papier wat je precies wilt dat er gebeurt en bedenk dan eens hoe je dat stap voor stap op kunt lossen. Het uitlezen van het logfile werkt al, mooi. Nu de rest nog.
jah.. maar dat weet ik toch al?

lokaal inlezen, lokaal versturen, lokaal leegmaken

online inlezen, online in de DB zetten.. dat is wat ik wil.. en wat ik to zover lees, is dat het met Post, Get en FTP kan.. online DB connectie gaat er niet inzitten, omdat ik onze mysql db niet uit kan breiden met users..

dus.. Post en Get.. maar omdat ik meer vertrouwen heb in FTP.. wil ik het daar in doen.. ben ik nu ook mee bezig.. alleen het werkt nog niet..

Ik ben ook een communicatie (studeer communicatie & multimedia design), en wil dit zo oplossen, ben geen programmeur.. en wil liever ook neit veel tijd steken in het leren van allemaal nieuwe php dingen. De ftp-script code kan ik aardig lezen, alleen het aanpassen van de code duurt gewoon wat langer..

13:37


Acties:
  • 0 Henk 'm!

  • Crayne
  • Registratie: Januari 2002
  • Laatst online: 17-03 13:41

Crayne

Have face, will travel

Nibbz schreef op maandag 14 januari 2008 @ 14:41:
[...]
jah.. maar dat weet ik toch al?

lokaal inlezen, lokaal versturen, lokaal leegmaken

online inlezen, online in de DB zetten.. dat is wat ik wil.. en wat ik to zover lees, is dat het met Post, Get en FTP kan.. online DB connectie gaat er niet inzitten, omdat ik onze mysql db niet uit kan breiden met users..
En waarom is het onmogelijk om een PHP pagina op te zetten, die online te plaatsen en daar naartoe te posten vanaf een PHP pagina die lokaal draait? Je denkfout is dat je een pagina lokaal wilt laten praten met de database die online staat.
dus.. Post en Get.. maar omdat ik meer vertrouwen heb in FTP.. wil ik het daar in doen.. ben ik nu ook mee bezig.. alleen het werkt nog niet..
Dat wil niet zeggen dat je er niet kunt verdiepen in POST en GET als dat betekent dat je je probleem goed op kunt lossen.
Ik ben ook een communicatie (studeer communicatie & multimedia design), en wil dit zo oplossen, ben geen programmeur.. en wil liever ook neit veel tijd steken in het leren van allemaal nieuwe php dingen. De ftp-script code kan ik aardig lezen, alleen het aanpassen van de code duurt gewoon wat langer..
Tja, ik denk dat je het jezelf veel moeilijker maakt dan nodig is. Maar het is jouw tijd en jouw inspanning.

Mijn Library Thing catalogus

Pagina: 1