probleem met file wegschrijven van een bestand
Door onverklaarbare oorzaak kan ik met file commando’s geen bestand meer naar een directory schrijven.
Onderstaande werkt niet op mijn macbookpro. Echter wel op een andere computer (mac).
$filename = "../backup_my2/teller.txt";
$handle = fopen($filename, "r");
$contents = fread($handle, filesize($filename));
fclose($handle);
Met de finder kan ik wel naar de betreffende dir schrijven maar vanuit php niet terwijl dit eerst gewoon werkte.
De rechten osx staan op read/write.
Permissions geeft: drwxr-xr-x
Ik heb daar echter nauwelijk kennis van. Kan iemand mij op weg helpen?
Vast bedankt,
Peter
Wie is de owner van die map? Als welke user draait PHP?
// File name and username to use
$file_name= "bestand.dat";
$path = "../blog/" . $file_name ;
$user_name = "root";
// Set the user
chown($path, $user_name);
// Check the result
$stat = stat($path);
print_r(posix_getpwuid($stat['uid']));
Warning: chown(): Operation not permitted in /Users/MacbookPeter/web/sites/pvk/backup1/owner.php on line 17
Array ( [name] => MacbookPeter [passwd] => ******** [uid] => 501 [gid] => 20 [gecos] => Peter van Kroonenburg [dir] => /Users/MacbookPeter [shell] => /bin/bash )
Kun je ook een echo getmyuid() doen?
Natuurlijk:getmyuid:501
Wat is de exacte melding als je probeert te schrijven?
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
32
33
34
35
36
37
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
<?PHP
// ik heb een folder test aangemaakt met de volgende bestanden
// mag_weg.txt met de inhoud -> Dit mag weg
// test.txt met de inhoud -> dit is het test.txt bestand
// read_write.php -> dit bestand
// ik kan deze bestanden in Dreamweaver zien en bewerken zonder problemen
// Previeuw in safari/chrome/firefox
//echo readfile("test.txt");
// Previeuw in safari/chrome/firefox
// geeft een wit scherm
//$file = fopen("bestand1.txt","w");
//echo fwrite($file,"Hello World. Testing!");
//fclose($file);
// Previeuw in safari/chrome/firefox
// geeft het getal 21
//$file = fopen("mag_weg.txt","w");
//echo fwrite($file,"Hello World. Testing!");
//fclose($file);
// Previeuw in safari/chrome/firefox
// geeft het ook het getal 21 (????????
// originele tekst blijf staan
//unlink('mag_weg.txt');
// blank scherm bestand blijft staan
//unlink('test.txt');
// blank scherm bestand blijft staan
// op een andere computer in met dezelfde website, structuur werkt het wel.
//
?>
// ik heb een folder test aangemaakt met de volgende bestanden
// mag_weg.txt met de inhoud -> Dit mag weg
// test.txt met de inhoud -> dit is het test.txt bestand
// read_write.php -> dit bestand
// ik kan deze bestanden in Dreamweaver zien en bewerken zonder problemen
// Previeuw in safari/chrome/firefox
//echo readfile("test.txt");
// Previeuw in safari/chrome/firefox
// geeft een wit scherm
//$file = fopen("bestand1.txt","w");
//echo fwrite($file,"Hello World. Testing!");
//fclose($file);
// Previeuw in safari/chrome/firefox
// geeft het getal 21
//$file = fopen("mag_weg.txt","w");
//echo fwrite($file,"Hello World. Testing!");
//fclose($file);
// Previeuw in safari/chrome/firefox
// geeft het ook het getal 21 (????????
// originele tekst blijf staan
//unlink('mag_weg.txt');
// blank scherm bestand blijft staan
//unlink('test.txt');
// blank scherm bestand blijft staan
// op een andere computer in met dezelfde website, structuur werkt het wel.
//
?>
In : /library/webserver/documents/
ook wel root genoemd, en in de Sites map in de Thuismap van de gebruiker.
Padnaam is dan : /User/gebruikersnaam/Sites/
Beide lokaties zijn te bereiken in de browser met respectievelijk :
http://localhost
en
http://localhost/~gebruikersnaam
Om veiligheidsredenen, die je zelf kan bedenken, kan je niet buiten die mappen schrijven. Mogelijk wel lezen, maar ga daar niet vanuit. De Chinese hackers zullen je dankbaar zijn.
Natuurlijk kan het met allerlei kunstgrepen.
Een daarvan is met Symbolic Links.
Je maak dan in de root of Sites map een symbolic link aan naar een willekeurige map op je harde schijf.
Vanuit de webserver gezien lijkt het dan een map/folder/directory.
Uiteraard moeten de permissies goed zijn.
Opmerking : een symbolic link lijkt op een Mac alias, maar is het niet.
Een symlink maak je aan in de Terminal.app.
Vervolgens heul veul oefenen.
>> // blank scherm bestand blijft staan
Geef eens het GEHELE pad op in plaats van alleen een bestandsnaam, dus:
unlink('/het/complete/pad/naar/mag_weg.txt');
/Users/MacbookPeter/web/sites/ONE/pvk/test/mag_weg.txt
Apache;
http://localhost:8888/pvk/
ROOT:-> MacbookPeter/web/sites
Het blijf natuurlijk toch wel heel vreemd dat op mijn macpro die hetzelfde is ingericht als mijn macbook het wel werkt?
21 is de handle van het bestand dat wordt geopend.
Doe het zo:
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
$file = fopen("mag_weg.txt","w");
fwrite($file,"Hello World. Testing!");
fclose($file);
$file = fopen("mag_weg.txt","r");
while(! feof($file))
{
echo fgets($file). "<br />";
}
fclose($file);
fwrite($file,"Hello World. Testing!");
fclose($file);
$file = fopen("mag_weg.txt","r");
while(! feof($file))
{
echo fgets($file). "<br />";
}
fclose($file);
Het is een goed idee om niet alles klakkeloos over te nemen :
http://www.w3schools.com/php/func_filesystem_fwrite.asp
Peter van Kroonenburg op 07/10/2016 17:53:33:
Het hele pad.
/Users/MacbookPeter/web/sites/ONE/pvk/test/mag_weg.txt
Apache;
http://localhost:8888/pvk/
ROOT:-> MacbookPeter/web/sites
Het blijf natuurlijk toch wel heel vreemd dat op mijn macpro die hetzelfde is ingericht als mijn macbook het wel werkt?
/Users/MacbookPeter/web/sites/ONE/pvk/test/mag_weg.txt
Apache;
http://localhost:8888/pvk/
ROOT:-> MacbookPeter/web/sites
Het blijf natuurlijk toch wel heel vreemd dat op mijn macpro die hetzelfde is ingericht als mijn macbook het wel werkt?
Ik bedoelde dus ... geef eens het hele pad op in die unlink() functie. Ofwel:
unlink('/Users/MacbookPeter/web/sites/ONE/pvk/test/mag_weg.txt');
Doet ie het dan wel?
Weet echter nog niet wat ik verkeerd doe?
Vermoedelijk een verschil in de working directory. Dit kun je terugvinden door echo getcwd(); te doen.
Hartelijk dank voor jullie hulp. Door jullie aanwijzingen ben ik er nu achter wat het probleem was. Ik heb inderdaad een fout gemaakt in de instellingen van de working directory. Het werkt nu zoals het hoort.
En.. ik heb er veel van geleerd.
Bedankt, Peter
Adoptive Solution op 07/10/2016 12:45:22:
Op een Mac zijn 2 locaties om webpaginas te hosten.
.....
Op een Mac zijn 2 locaties om webpaginas te hosten.
.....
Dat ligt er maar aan wat je in httpd.conf opgeeft als locatie (of wat je bij de virtual hosts opgeeft.
Enige vereiste is dat de owner van het proces van de webserver (apache?) kan lezen in die map.
Nu weet ik niet hoe Apache standaard wordt geconfigureerd op een mac, daar blijf ik mooi bij vandaan, maar mogelijk is de docroot anders, of heb je iets als een basedir restrictie, kan allemaal. Foutmeldingen staan sowieso uit, anders had je veel duidelijkere meldingen gehad.