România
Roportal.ro

Creare functie php

Început de flobeats, Lun 4 iun 2007 · 9 răspunsuri · 6.835 vizualizări

flobeats32 mesaje#1

Am un script:

<?php

$fvalori = 'valori3.txt'; // fisierul din care se citesc valorile

$fcontor = 'contor.txt'; // fisierul in care se pastreaza contorul

$errbuf = false; // asta o folosim ca sa verificam in diferite puncte daca a aparut vreo eroare

// verificam sa existe fisierul

if( !file_exists($fvalori) ){

// daca nu exista afisam o eroare si $errbuf ia valoarea true (o verificam imediat)

echo 'Fisierul '.$fvalori.' nu exista.<br />';

$errbuf = true;

}

// dupa ce am trecut de codul de mai sus $errbuf va avea valoarea true daca a aparut o eroare care ne impiedica

// sa folosim fisierul specificat in $fvalori

// aceleasi verificari le facem si pentru $fcontor

if( !file_exists($fcontor) ){

echo 'Fisierul '.$fcontor.' nu exista.<br />';

}

if( $errbuf ) die('</body></html>');

// daca am ajuns aici totul e ok si putem citi din fisier

// prima data citim valorile

$valori = file_get_contents($fvalori);

// apoi citim contorul si folosim trim() ca sa eliminam spatiile de la inceput si sfarsit (in cazul in care exista)

$contor = trim(file_get_contents($fcontor));

// verificam daca $contor e numar. daca nu e numar (re)setam contorul la 0

if( !is_numeric($contor) ) $contor = 0;

// transformam $valori intr-un array care are in fiecare element continutul unei linii

// treaba se face cu explode() folosind caracterul de rand nou ca delimitator

$valori = explode("\n",$valori); // refolosim $valori ca sa nu incarcam inutil memoria. PHP ne permite ;-)

// avem valorile in array, avem contorul, inainte de afisare mai trebuie sa verificam doar daca contorul nu cumva e mai mare decat numarul de linii din $valori

// caz in care trebuie sa il resetam la 0

// se compara cu ($contor+1) pentru ca in PHP numaratoarea incepe de la 0 (C-style)

if( count($valori) < ($contor+1) ) $contor = 0;

// acum totul e safe, putem citi linia care ne intereseaza si sa o afisam

$linie = $valori[$contor]; // linia care urmeaza sa fie afisata e elementul $contor din array-ul $valori

$linie = explode(' ',$linie);

for( $i=1 ; $i<count($linie) ; $i++ )

echo 'Camera '.$i.' este : '.trim($linie[$i]).'<br />';

file_put_contents($fcontor,++$contor);

?>

Codul functioneaza acasa la mine, dar am php 5.

Problema este ca pe majoritatea serverelor nu imi recunosc functia file_get_contents() si file_put_contents pt ca e functie

mai noua de 4.3.0 si nu am gasit server cu php mai nou care sa gazduiasca sa pot pune acest script.

Trebuie eu sa creez o functie care sa i ia locul.Eu am incercat ceva de genul, aveti ceva sfaturi..?

<?php

function file_get_contents()

{

$handle = fopen("fisierulmeu.txt", "r");

while (!feof($handle))

{

$buffer = fgets($handle, 512);

}

}

fclose($handle);

?>

---------------------------------------

<?php

function file_put_contents()

....

fputs sau fwrite

....

?>

---------------------------------------

Am nevoie de ajutor in problema asta..

Multumesc.

Argv2.495 mesaje#2

N-am testat dar probabil ar trebui sa modifici sa concatenezi fiecare linie citita si la sfarsit sa faci return:

function file_get_contents()
{
 $handle = fopen("fisierulmeu.txt", "r");
 while (!feof($handle))
{
	 $buffer += fgets($handle, 512);
}
fclose($handle);

  return $buffer;
}

Dar in locul tau as face altfel; as citi linie cu linie si as trata fiecare linie, fara sa mai folosesc deloc file_get_contents. Deci nu mai ai nevoie nici de explode. Ar fi mult mai optim din punct de vedere al memoriei si al codului.

flobeats32 mesaje#3

Nu prea inteleg cum spui tu sa modific..

"Dar in locul tau as face altfel; as citi linie cu linie si as trata fiecare linie, fara sa mai folosesc deloc file_get_contents. Deci nu mai ai nevoie nici de explode. Ar fi mult mai optim din punct de vedere al memoriei si al codului."

Multumesc Argv..poate ai dreptate in legatura cu codul, dar am mai spus o, am vazut cod php pt prima data acum 2 sapt si juma', m am uitat peste manual, functii, am mai cerut ajutor si asa am reusit sa fac ceea ce imi trebuie pt. pagina. Acum cand in sfarsit am zis ca e gata..trebuie iar sa modific codul.

Nu vreau sa mai folosesc file_get_contents(), dar trebuie sa creez o functie care sa i ia locul, astfel server ul o va interpreta cum trebuie; la fel si pentru file_put_contents().

Sa o iau iarasi de la inceput sa fac alt cod, imi mai trebuie iarasi cine stie cat timp. Pana in data de 14 am de predat proiectul..si eu nu sunt gata cu partea de practica..deci trebuie urgent sa fac cumva cu codul asta care mi a facut peri albi.

Daca poti fi mai explicit cu codul..mersi.

Argv2.495 mesaje#4

Inteleg :kiss: nu te supara ca nu am criticat codul, era doar o sugestie..

Incearca functiile astea (nu le-am testat). Poate ar trebui sa le dai alte nume sa nu fie conflict cu cele din php.

function file_put_contents($handle, $string)
{
fwrite($handle, $string);
}

function file_get_contents($handle)
{
  $contents = '';
  while (!feof($handle)) 
  {
   $contents .= fread($handle, 8192);
  }
  return $contents;
}

Uite inca o varianta pt get; am gasit-o la functia "file":

$handle = @fopen('yourfile...', "r");

if ($handle) {

while (!feof($handle)) {

$lines[] = fgets($handle, 4096);

}

fclose($handle);

}

flobeats32 mesaje#5

"Inteleg nu te supara ca nu am criticat codul, era doar o sugestie.. "

Nu ma supar, sunt convins ca se poate mai bine..eu altceva mai bun nu am..vreau doar sa si faca treaba :yahoo:)

Multumesc pt. bunavointa.

O sa incerc codul.

----------------------------

Am incercat amandoua variantele..nu e nici o greseala de sintaxa, dar cand le pun in pagina am urmatoarea eroare:

Warning: fwrite(): supplied argument is not a valid stream resource in C:\xampp\htdocs\licenta\monitmiscare.php on line 25

Editat Lun 4 iun 2007 17:48

Argv2.495 mesaje#6

Acum am observat ca tu apelezi cu filename nu cu file handle; uite modificarea:

function file_put_contents($filename, $string)
{
$handle = fopen($filename, "a");
if ($handle)
{
	fwrite($handle, $string);
	fclose($handle);
}
else
{
   echo 'Eroare deschidere fisier output: $filename'; 
}
}

function file_get_contents($filename)
{
  $contents = '';
  $handle = fopen($filename, "r");

  if ($handle)
  {
	 while (!feof($handle))
	 {
		$contents .= fread($handle, 8192);
	 }
	 fclose($handle);
}
else
{
	echo 'Eroare deschidere fisier input: $filename'; 
}

  return $contents;
}
flobeats32 mesaje#7

Multumesc..e aproape bine, imi citeste doar prima linie din valori.txt meu si am observat urmatoarea chestie: in fisierul contor.txt am valori de genul: 012111111111111111(fisierul isi face refresh si la fiecare refresh adauga inca un 1);

La varianta de cod care merge la mine pe server si pe server ul lor nu merge in contor.txt am valori de la 1 la 10 sa zicem..cate linii am eu in fisierul valori.txtDe ex: acum am 1; la urmatorul refresh am 2; laurm am 3, samd.

Ceva nu e ok in cod. Daca iei codul care l am postat sus de tot si mai creezi cele 2 fisiere o sa vezi cum lucreaza codul.

valori.txt:

1 2 3 4

3 4 5 6

5 6 7 8

contor.txt: valoarea 0.

Codul meu acum arata asa acum ..am pus cele doua functii ce mi le ai dat:

<html>

<head>

<title>Monitorizare online</title>

<meta http-equiv="refresh" content="10" />

</head>

<body>

<?php

function file_get_contentt()

{

$handle = @fopen('fisierulmeu.txt', "r");

if ($handle) {

while (!feof($handle)) {

$lines[] = fgets($handle, 512);

}

fclose($handle);

}

}

function file_put_contentt($handle, $string)

{

fwrite($handle, $string);

}

function file_get_cont($handle)

{

$contents = '';

while (!feof($handle))

{

$contents .= fread($handle, 8192);

}

return $contents;

}

$fvalori = 'valori.txt'; // fisierul din care se citesc valorile

$fcontor = 'contor.txt'; // fisierul in care se pastreaza contorul

$errbuf = false; // asta o folosim ca sa verificam in diferite puncte daca a aparut vreo eroare

// verificam sa existe fisierul

if( !file_exists($fvalori) ){

// daca nu exista afisam o eroare si $errbuf ia valoarea true (o verificam imediat)

echo 'Fisierul '.$fvalori.' nu exista.<br />';

$errbuf = true;

} //else if( !is_readable($fvalori) || !is_writable($fvalori) ){

// daca exista fisierul dar nu avem drept de citire sau scriere se afiseaza o alta eroare si $errbuf ia valoarea true

//echo 'Fisierul '.$fvalori.' are permisiunile puse gresit.<br />';

//$errbuf = true; }

// dupa ce am trecut de codul de mai sus $errbuf va avea valoarea true daca a aparut o eroare care ne impiedica

// sa folosim fisierul specificat in $fvalori

// aceleasi verificari le facem si pentru $fcontor

if( !file_exists($fcontor) ){

echo 'Fisierul '.$fcontor.' nu exista.<br />';

} //else if( !is_readable($fcontor) || !is_writable($fcontor) ){

//echo 'Fisierul '.$fcontor.' are permisiunile puse gresit.<br />';

//$errbuf = true; }

// daca pana aici a aparut o eroare nu are rost sa continuam, deci se apeleaza die() care opreste scriptul si inchide codul HTML

if( $errbuf ) die('</body></html>');

// daca am ajuns aici totul e ok si putem citi din fisier

// prima data citim valorile

$valori = file_get_contentt($fvalori);

// apoi citim contorul si folosim trim() ca sa eliminam spatiile de la inceput si sfarsit (in cazul in care exista)

$contor = trim(file_get_contentt($fcontor));

// verificam daca $contor e numar. daca nu e numar (re)setam contorul la 0

if( !is_numeric($contor) ) $contor = 0;

// transformam $valori intr-un array care are in fiecare element continutul unei linii

// treaba se face cu explode() folosind caracterul de rand nou ca delimitator

$valori = explode("\n",$valori); // refolosim $valori ca sa nu incarcam inutil memoria. PHP ne permite ;-)

// avem valorile in array, avem contorul, inainte de afisare mai trebuie sa verificam doar daca contorul nu cumva e mai mare decat numarul de linii din $valori

// caz in care trebuie sa il resetam la 0

// se compara cu ($contor+1) pentru ca in PHP numaratoarea incepe de la 0 (C-style)

if( count($valori) < ($contor+1) ) $contor = 0;

// acum totul e safe, putem citi linia care ne intereseaza si sa o afisam

$linie = $valori[$contor]; // linia care urmeaza sa fie afisata e elementul $contor din array-ul $valori

$linie = explode(' ',$linie); // elementele se pastreaza separate de spatii. folosim explode() ca sa le separam

for( $i=1 ; $i<count($linie) ; $i++ )

echo 'Sectorul '.$i.' este : '.trim($linie[$i]).'<br />';

// am afisat tot ce era de afisat. incrementam contorul si salvam valoarea in $fcontor

file_put_contentt($fcontor,++$contor);

//Fisierul contor.txt care sa aiba valoarea 0 (fara nimic altceva) si fisierul //valori.txt care sa aiba valorile de forma: 1 2 3 4 samd

?>

</body>

</html>

Multumesc de ajutor.

Editat Lun 4 iun 2007 18:50

Argv2.495 mesaje#8

Nu cred ca mi-ai dat sursa buna, asta este incoerenta.

Mai pune o data sursa...

Incearca varianta asta (n-am testat):

<html>
<head>
<title>Monitorizare online</title>
<meta http-equiv="refresh" content="10" />
</head>
<body>
<?php

function local_file_put_contents($filename, $string)
{
$handle = fopen($filename, "w+");
if ($handle)
{
	fwrite($handle, $string);
	fclose($handle);
}
else
{
   echo 'Eroare deschidere fisier output: $filename';
}
}

function local_file_get_contents($filename)
{
  $contents = '';
  $handle = fopen($filename, "r");

  if ($handle)
  {
	 while (!feof($handle))
	 {
		$contents .= fread($handle, 8192);
	 }
	 fclose($handle);
}
else
{
	echo 'Eroare deschidere fisier input: $filename';
}

  return $contents;
}

$fvalori = 'valori.txt'; // fisierul din care se citesc valorile
$fcontor = 'contor.txt'; // fisierul in care se pastreaza contorul

$errbuf = false; // asta o folosim ca sa verificam in diferite puncte daca a aparut vreo eroare

// verificam sa existe fisierul
if ( !file_exists($fvalori) )
{
// daca nu exista afisam o eroare si $errbuf ia valoarea true (o verificam imediat)
echo 'Fisierul '.$fvalori.' nu exista.<br />';
$errbuf = true;
} 
//else if( !is_readable($fvalori) || !is_writable($fvalori) ){
// daca exista fisierul dar nu avem drept de citire sau scriere se afiseaza o alta eroare si $errbuf ia valoarea true
//echo 'Fisierul '.$fvalori.' are permisiunile puse gresit.<br />';
//$errbuf = true; }
// dupa ce am trecut de codul de mai sus $errbuf va avea valoarea true daca a aparut o eroare care ne impiedica
// sa folosim fisierul specificat in $fvalori
// aceleasi verificari le facem si pentru $fcontor

if ( !file_exists($fcontor) )
{
echo 'Fisierul '.$fcontor.' nu exista.<br />';
} 
//else if( !is_readable($fcontor) || !is_writable($fcontor) ){
//echo 'Fisierul '.$fcontor.' are permisiunile puse gresit.<br />';
//$errbuf = true; }

// daca pana aici a aparut o eroare nu are rost sa continuam, deci se apeleaza die() care opreste scriptul si inchide codul HTML
if( $errbuf ) die('</body></html>');

// daca am ajuns aici totul e ok si putem citi din fisier
// prima data citim valorile
$valori = local_file_get_contents($fvalori);

// apoi citim contorul si folosim trim() ca sa eliminam spatiile de la inceput si sfarsit (in cazul in care exista)
$contor = trim(local_file_get_contents($fcontor));

// verificam daca $contor e numar. daca nu e numar (re)setam contorul la 0
if( !is_numeric($contor) ) $contor = 0;

// transformam $valori intr-un array care are in fiecare element continutul unei linii
// treaba se face cu explode() folosind caracterul de rand nou ca delimitator
$valori = explode("\n", $valori); // refolosim $valori ca sa nu incarcam inutil memoria. PHP ne permite;-)

// avem valorile in array, avem contorul, inainte de afisare mai trebuie sa verificam doar daca contorul nu cumva e mai mare decat numarul de linii din $valori
// caz in care trebuie sa il resetam la 0
// se compara cu ($contor+1) pentru ca in PHP numaratoarea incepe de la 0 (C-style)
if ( count($valori) < $contor ) $contor = 0;

// acum totul e safe, putem citi linia care ne intereseaza si sa o afisam
$linie = $valori[$contor]; // linia care urmeaza sa fie afisata e elementul $contor din array-ul $valori
$linie = explode(' ', $linie); // elementele se pastreaza separate de spatii. folosim explode() ca sa le separam
for( $i=0; $i<count($linie); $i++ )
echo 'Sectorul ' . $i . ' este : ' . trim($linie[$i]) . '<br />';

// am afisat tot ce era de afisat. incrementam contorul si salvam valoarea in $fcontor
local_file_put_contents($fcontor, ++$contor);
//Fisierul contor.txt care sa aiba valoarea 0 (fara nimic altceva) si fisierul //valori.txt care sa aiba valorile de forma: 1 2 3 4 samd

?>
</body>
</html>

Editat Lun 4 iun 2007 19:41

flobeats32 mesaje#9

Iti multumesc din suflet.. :yahoo: functioneaza..fac modificarile de rigoare si m am scapat de pagina.

Trimit bere prin posta :o:

Multumesc, multumesc,multumesc!

Neaparat trebuie sa bei o bere de la mine!..asa ca sa mearga codul bine.. :rot:

← Înapoi la Programare