Fwrite geeft 0 bytes terug bij sommige bestanden.
Mijn code:
Code (php)
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
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
<?php
$sqlurl = $_GET['file'];
$sqlserv = $_GET['serv'];
$local = CMS_ROOT_PATH.'/'.$_GET['local'];
$sql = sendReq($sqlserv, $sqlurl); // Geeft waarde terug van een fsockopen, exclusief headers.
if (!file_exists($local)) {
$fp = @fopen($local, 'w');
if (!$fp) {
die('error');
}
fwrite($fp, $sql, strlen($sql));
fclose($fp);
} else {
$file = fopen($local, 'r+b'); // binary update mode
if (!$file) {
die('error');
}
rewind($file);
if (($bytes = fwrite($file, $sql, strlen($sql))) !== false) {
echo $bytes.' bytes written!';
}
fflush($file);
ftruncate($file, ftell($file));
fclose($file);
}
$file = file_get_contents($local);
if ($file != $sql) {
die('error');
}
exit;
?>
$sqlurl = $_GET['file'];
$sqlserv = $_GET['serv'];
$local = CMS_ROOT_PATH.'/'.$_GET['local'];
$sql = sendReq($sqlserv, $sqlurl); // Geeft waarde terug van een fsockopen, exclusief headers.
if (!file_exists($local)) {
$fp = @fopen($local, 'w');
if (!$fp) {
die('error');
}
fwrite($fp, $sql, strlen($sql));
fclose($fp);
} else {
$file = fopen($local, 'r+b'); // binary update mode
if (!$file) {
die('error');
}
rewind($file);
if (($bytes = fwrite($file, $sql, strlen($sql))) !== false) {
echo $bytes.' bytes written!';
}
fflush($file);
ftruncate($file, ftell($file));
fclose($file);
}
$file = file_get_contents($local);
if ($file != $sql) {
die('error');
}
exit;
?>
Als ik het aanroep met update-rpc.php?token=updater&getfile&serv=ck485537-a.dokku1.fr.home.nl
&file=/bascms2/update/updates/UPD1/module.txt
&local=modules/admin/module.php
, dan echo't het script "0 bytes written!", en staat er ook 0 bytes in het bestand. Ook al dat $sql wel het bestand bevat, namelijk de inhoud van http://ck485537-a.dokku1.fr.home.nl/bascms2/update/updates/UPD1/module.txt .
Als ik het aanroep met
update-rpc.php?token=updater&getfile&serv=ck485537-a.dokku1.fr.home.nl
&file=/bascms2/update/updates/UPD1/lang.txt
&local=modules/admin/lang/en/lang.php
, geeft hij gewoon "150 bytes written", en staat alle inhoud nog in het bestand.
Wat ik al probeerde: User notes op PHP.net, niks daarvan werkt. Googles, niks gevonden. Uitgebreid debuggen, niks hielp. Zend studio booten, nope :(
Weet iemand een oplossing?
Groeten,
Bas
'r+' Openen voor lezen en schrijven; plaats de bestands pointer aan het begin van het bestand.
'w' Openen voor alleen schrijven; plaats de bestands pointer aan het begin van het bestand en maak het bestand 0 bytes lang. Als het bestand niet bestaat, probeer het aan te maken.
'w+' Openen voor lezen en schrijven; plaats de bestands pointer aan het begin van het bestand en maak het bestand 0 bytes lang. Als het bestand niet bestaat, probeer het aan te maken.
'a' Openen voor alleen schrijven; plaats de bestands pointer aan het einde van het bestand. Als het bestand niet bestaat, probeer het aan te maken
'a+' Openen voor lezen en schrijven; plaats het bestands pointer aan het einden van de file. Als het bestand niet bestaat, probeer het aan te maken.
Deze functies die ik gebruik als het bestand al bestaat stonden in een user note, en zorgen voor overschrijven, zonder owner te wijzigen. Als het bestand niet bestaat, en W gebruikt wordt, werkt het trouwens ook net zo.
prbeer is a
En Fwrite hoort het aantal geschreven bytes terug te geven, bij sommige bestanden returnt hij het goede aantal, en bij sommige 0, en staat er ook echt 0 bytes in het bestand.