Schrijf/Write functie

Door PHP Newbie, 22 jaar geleden, 4.745x bekeken

Met deze functie kun je op een gemakkelijke manier naar een bestand schrijven. Zonder al die fopen en fclose zooi en je kunt er gemakkelijk zelf dingen aan toevoegen.

Het kan best zijn dat dit script eigenlijk TE gemakkelijk is voor de scriptlib. Maar aangezien de vraag al vaker in het forum gesteld is, dacht ik: ik post hem toch maar.
Aan de admins om te beslissen of de functie mag blijven staan.

Werkt alleen op PHP 5 en hoger

Gesponsorde koppelingen

PHP script bestanden

  1. schrijfwrite-functie

 

Er zijn 11 reacties op 'Schrijfwrite functie'

PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen
Bo az
Bo az
22 jaar geleden
 
0 +1 -0 -1
Volgens mij voegt je functie niks toe aan de bestaande file_put_contents, al had je alleen maar is_writable ipv file_exists gebruikt was het al beter geweest. file_exists heeft hier namelijk niets mee te maken, een bestand kan namelijk ook gemaakt worden als het niet bestaat.
Bovendien return je de fout melding, dit kan beter een return false zijn en evt een trigger_error.
Je hebt ook je eigen oplossing verzonnen voor de constante FILE_APPEND ;)
PHP Newbie
PHP Newbie
22 jaar geleden
 
0 +1 -0 -1
Boaz:
Volgens mij voegt je functie niks toe aan de bestaande file_put_contents


Dat wel

Boaz:
al had je alleen maar is_writable ipv file_exists gebruikt was het al beter geweest


Aangepast

Boaz:
Bovendien return je de fout melding, dit kan beter een return false zijn en evt een trigger_error.


Ook aangepast :-)
Joeri
Joeri
22 jaar geleden
 
0 +1 -0 -1
Kan je even een link naar een werkend voorbeeld geven aub.

- Wat als de HTTP-wrapper afstaat en je wil lezen met file_get_conetnts() uit een bestand gelegen in een hogere map: krijg je een open_basedir restriction

Dit kan ik natuurlijk oplossen met cURL te gebruiken.

Voor de rest vind ik het een leuk scriptje al moet ik me aansluiten bij Boaz dat het eigenlijk toch niet echt veel veranderd aan de funktie file_put_contents() die gebruik ik nu met de funktie cURL om fopen() te vervangen voor het uitlezen van bestanden daar ik anders errors krijg bij het uitlezen van bestanden op externe locaties omdat de http-wrapper en de funktie fopen() uitgeschakeld zijn. (ik kan dus ook jouw script niet gebruiken voor bestanden uit te lezen in hoger gelezen mappen.)

Update: is enkel met de file_get_contents() dat je error krijgt en dit ook enkel als de http-wrapper afstaat. Je kan wel willen lezen/schrijven naar een bestand op je eigen server maar in een hogere map bvb.: ../../index.txt of /index.txt. ik krijg alvast open_basedir restriction op de file_get_contents().
Schrijven naar een externe lokatie niet gaan??? en Als het een externe locatie is waar je wel rechten op hebt bvb. naar een bestand op een andere server/domein van je eigen??

Dacht ik toch niet als ik in mijn .htaccess bestand op de andere server een bepaald ip adres toelaat (adres van mijn andere server) en de rest niet??
@PHP Newbie: het is en blijft wel een zeer handige funktie en zal ze zeker gebruiken moet gewoon enkel de file_get_contents(); vervangen door een cURL funktie om het bestand uit te lezen.!!!
PHP Newbie
PHP Newbie
22 jaar geleden
 
0 +1 -0 -1
een link naar een voorbeeld vond ik niet nodig Joeri, aangezien het gewoon een functie is die naar een bestand schrijft, valt volgens mij niet veel aan te laten zien..

Ik heb het net even getest, en ik kan gewoon schrijf('../file.txt', 'tekst'); doen...

Edit:

Verder kun je toch niet schrijven naar externe locaties, dus heb je ook geen functie nodig die externe bestanden kan controleren...

Edit:

Dan kan het nog niet, enige manier om het bestand te wijzigen is dan via FTP, want jij kunt niet zomaar "rechten" krijgen op een bestand op een andere server, want als jij het bestand mag wijzigen vanaf jou server, kan ik dat ook vanaf de mijne :-)

Edit:

Oke, daar heb je een punt, maar een PHP'er die dit script nodig heeft (dus niet gebruikt, maar nodig heeft omdat diegene het zelf niet kan schrijven) zal zo ver echt nog niet zijn.
Dus wil je het op die manier gaan gebruiken zul je een eigen functie moeten schrijven.


- SanThe -
- SanThe -
22 jaar geleden
 
0 +1 -0 -1
Lekker simpel scriptje. Is inderdaad veel vraag naar.
K i p
K i p
22 jaar geleden
 
0 +1 -0 -1
Wat is het verschil tussen
return TRUE;
en
return true;
?
PHP Newbie
PHP Newbie
22 jaar geleden
 
0 +1 -0 -1
volgens mij niets... Hoezo?
Willem Jan Z
Willem Jan Z
22 jaar geleden
 
0 +1 -0 -1
Officieel is het true, met kleine letters.
Alle constanten worden met hoofdletters geschreven, behalve true en false.
Maar voor de werking maakt het niet uit, alleen voor de duideljkheid.
Rudie dirkx
rudie dirkx
22 jaar geleden
 
0 +1 -0 -1
Niks officieel. Niet alle constanten worden met hoofdletters geschreven, onzin! De meeste mensen doen dat ja, maar heeft niks met officieel te maken. Zie www.php.net/define
K i p
K i p
22 jaar geleden
 
0 +1 -0 -1
Misschien leuk om een controle in te bouwen met php_version_compare() == -1 ofzoiets. En als het niet PHP 5 is met fopen en fwrite werken.
PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen
K i p
K i p
21 jaar geleden
 
0 +1 -0 -1
Zoiets?
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?php
    function schrijf ( $bestand , $tekst, $begin = false )
    {

        $version = explode ( '.' , phpversion () );
        if ( intval ( $version[0] ) >= 5 )
        {

            #Eerst controleren of het bestand wel bestaat, of misschien is het niet schrijfbaar
            if ( ( !file_exists ( $bestand ) ) OR ( !is_writable ( $bestand ) ) )
            {

                #Het gekozen bestand voldoet niet, dus "fout" "teruggeven"
                return false;
            }

            else
            {
                if ( $begin === true ) //en begin is true
                {
                    $write = $tekst . file_get_contents ( $bestand ); //dan schrijven we aan het begin van het bestand
                }
                else //Als begin niet true is
                {
                    $write = file_get_contents ( $bestand ) . $tekst; //dan schrijven we achteraan het bestand
                }
                
                if ( file_put_contents ( $bestand , $write ) ) //als het schrijven gelukt is
                {
                    return true; //geven we true terug
                }
                else //als het schrijven niet gelukt is
                {
                    return false; //geven we false terug
                }
            }
        }

        else
        {
            #Als de versie lager dan 5 is
            #Dan zullen we met fopen enz. moeten gebruiken

            
            if ( !$handle = @fopen ( $bestand , 'r' ) )
            {

                return false;
            }

            if ( !$inhoud = @fread ( $handle , filesize ( $bestand ) ) )
            {

                return false;
            }

            if ( !$sluiten = @fclose ( $handle ) )
            {

                return false;
            }

            
            if ( $handle = @fopen ( $bestand , 'w' ) )
            {

                $tekst = ( ( $begin === true ) ? ( $tekst . $inhoud ) : ( $inhoud . $tekst ) );
                if ( !$resultaat = @fwrite ( $handle , $tekst ) )
                {

                    return false;
                }

                else
                {
                    return true;
                }
            }

            else
            {
                return false;
            }
        }
    }

?>

Om te reageren heb je een account nodig en je moet ingelogd zijn.

Inhoudsopgave

  1. schrijfwrite-functie

Labels

  • Geen tags toegevoegd.

Navigatie

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.