Une class des fichiers

Mammouth du PHP | 725 Messages

19 juin 2011, 06:46

bonjour,

Je voudrais effectuer une class de verification de fichiers par 2 fonctions:

+ file_exists,
+ is_file.
<?php
class File_Check {
	
	public $fileName;
	
	public function __construct()
		{
			
					
		}
		
	public function fileExists($fileName='')
		{
			$this->fileName = $fileName;
			
			if(file_exists($this->fileName))
			{
				return TRUE;
			}
			else
			{
				return FALSE;
			}
			
		}
		
	public function isFile($fileName='')
		{
			$this->fileName = $fileName;
			
			if(is_file($this->fileName))
			{
				return TRUE;
			}
			else
			{
				return FALSE;
			}
			
		}
				
}
?>
et sur une autre page je fais appel a ma class:
$check = new File_Check();
$check->fileExists('fichier.php');
comment puis je fais afin d'effectuer le suivant selon plusieurs cas:

+ Si le fichier existe je l'inclus,
+ Si le fichier existe j'affiche un message,
+ Si le fichier existe je redirige vers une autre page,
+ etc,

une des actions ci-cite seront utilisees selon le cas, c'est pour cela j'ai mis return TRUE et non include par exemple.

merci

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

19 juin 2011, 07:03

salut,

franchement je pige pas ce que tu veux faire parce que bon des deux méthodes c'est refaire les fonctions de base en plus et plus lent.

tel que c'est fait ton objet est inutile. si par contre tu souhaite pourvoir inclure les fichiers ensuite et que tu fait une méthode qui va vérifier si le fichier existe (et que c'est bien un fichier) et qui ensuite l'inclus pourquoi pas (mais bon une simple fonction sera suffisant).

Par exemple
<?php
class File_Check {
       
	private $fileName;
   
	public function __construct()
			{
			}
		   
	private function fileExists()
		{		   
			if(file_exists($this->fileName))
			{
					return TRUE;
			}
			else
			{
					return FALSE;
			}
			   
		}
		   
	private function isFile()
		{
			if(is_file($this->fileName))
			{
					return TRUE;
			}
			else
			{
					return FALSE;
			}
			   
		}
	public function checkAndInclude( $filename ) {
		$this->fileName = $fileName;
		if( $this->fileExists())
			if( $this->isFile())
				include $this->filename;
			else return 'Le lien fournit n\'est pas un fichier';
		else return 'Le fichier fournit n\'existe pas !';
		return true
	}
}

//ou alors une simple fonction fait très bien l'affaire ;)

function checkAndInclude( $filename ) {
	if (file_exists($filename)) {
		if (is_file($filename)) {
			include $filename;
		}
		else return 'Le lien fournit n\'est pas un fichier';
	}
	else {
		else return 'Le fichier fournit n\'existe pas !';
	}
	return true;
}
?>
@+
Il en faut peu pour être heureux ......

Mammouth du PHP | 725 Messages

19 juin 2011, 07:30

merci moogli pour votre reponse, alors cette ligne la peut avoir autre chose que include:
include $filename;
si jamais j'ai souhaite ne pas inclure mais afficher un message au lieu de include:
echo 'merci'; // par exemple
je voudrais une fonction que je peux:

+ Inclure
OU BIEN
+ Afficher un message
OU BIEN
+ Rediriger
OU BIEN
+ ETC,..

selon les cas que je souhaite utiliser

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

19 juin 2011, 09:33

heu ben la va falloir ajouter un paramètre a la fonction. si tu avais un exemple concret, parce que la c'est flou (d’où viens le message, comment le choix est fait,dans quel cas etc etc).

désolé, mais ce que tu veux faire est certainement clair dans ta tête, mais moi j'y ai pas accès :mrgreen:

@+
Il en faut peu pour être heureux ......

Mammouth du PHP | 725 Messages

20 juin 2011, 02:46

voila un exemple concret:
<?php
class File_Check {
	
	public $fileName;
	
	public function __construct()
		{
			
					
		}
		
	public function fileExists($fileName='', $fileMethod=array(), $toDo=array())
		{
			$this->fileName = $fileName;
			$this->fileMethod = $fileMethod;
			$this->toDo = $toDo;

			$methods = array('exists', 'isfile');
			$what = array('include', 'message');
			
			//$value = '';
			foreach($this->fileMethod as $key=>$val)
			{
			//	$value .= $val;
				
				if(!in_array($val, $methods))
				{
					echo $val.' is not in the methods<br>';
				}
				
			}
			
			$this->val = $val;
			
			echo $this->val.'<br>';
			
			foreach($this->toDo as $k=>$v)
			{
				if(!in_array($k, $what))
				{					
					echo $k.' IS NOT in what<br>';
				}
				
				switch($k)
				{
					
					case 'include':
					if($this->val == 'exists')
					{
						if(file_exists($this->fileName))
						{
							echo 'exists';
							include $this->fileName;
						}
						else
						{
							echo 'the file "'.$this->fileName.'" DOES NOT EXISTS<br>';	
						}
						
						
					}
					else
					{
						echo 'NO EXISTS';
					}
					
					
					if($this->val == 'isfile')
					{
						if(is_file($this->fileName))
						{
							include $this->fileName;
						}
						else
						{
							echo 'the file "'.$this->fileName.'" IS NOT A FILE<br>';
						}
						
						
					}
					else
					{
						echo 'NO ISFILE';
											
					}
					
					break;
					
					case 'message':
					
					if($this->val == 'exists')
					{
						if(file_exists($this->fileName))
						{
							echo $v;
						}
						else
						{
							echo 'the file "'.$this->fileName.'" DOES NOT EXISTS<br>';	
						}
						
					}
					else
					{
						echo 'NOT EXISTS<br>';
											
					}	
					
					
					
					if($val == 'isfile')
					{
						if(is_file($this->fileName))
						{
							echo $v;
						}
						else
						{
							echo 'the file "'.$this->fileName.'" IS NOT A FILE<br>';
						}
						
						
					}
					else
					{
						echo 'NOT ISFILE<br>';
					}
					
				}
				
			}
			
		}		
		
					
}

$check = new File_Check();
$check->fileExists('home', array('exists', 'isfile'), array('message'=>'mon message ici'));
//$check->fileExists('home', array('exists', 'isfile'), array('message'=>'path_to_file'));

?>

son inconvenient il ne fait le test avec exists et isfile, mais il le fait seulement avec isfile, le dernier choix, si je retire isfile, il le fait avec exists, je pense que c'est une erreur de loop

devlop78
Invité n'ayant pas de compte PHPfrance

20 juin 2011, 04:16

Non ce n'est pas propre tout ça. Trop de responsabilités dans une seule méthode.

Tu peux imaginer :

isFile() => retourne true/false
fileInclude => Vérifie avec isFile que c'est bien un fichier, si oui, il l'inclue, si non, il émet une exception.

etc.

Ce n'est pas son rôle non plus d'afficher un message d'erreur ni d'en retourner un par return.

Mammouth du PHP | 725 Messages

20 juin 2011, 04:40

donc j'annule isFile et je garde seulement file_exists??

Mammouth du PHP | 725 Messages

22 juin 2011, 14:33

@moogli: il y a une erreur quelque part dans votre fonction, elle marche pas.

comment puis je tester que 2 fonctions retournent TRUE:
function exists ()
{
if
TRUE
else
FALSE
}

function isit ()
{
if
TRUE
else
FALSE
}

function ISITexists ()
{
if exists et isit sont true
TRUE
else
FALSE

}


est ce que je ferai une par une, des fonctions separees:
public final function fileExists() {

// traitement des donnees

}

public final function isFile() {

// traitement des donnees

}

devlop78
Invité n'ayant pas de compte PHPfrance

22 juin 2011, 17:07

Là je pense qu'on va tous avoir du mal à t'aider. Si tu as des questions concernant l'objet, pose-les, sinon, où veux-tu en venir, car là, la classe n'a pas beaucoup de sens ...

Mammouth du PHP | 725 Messages

23 juin 2011, 03:42

si j'ai 2 fonctions qui retournent TRUE et FALSE, comment puis je verifier que les 2 ont renvoye un true:

function fonction1() {

if(condition)
return TRUE
else
return FALSE
}


function fonction2() {

if(condition)
return TRUE
else
return FALSE
}


function Grouperfonctions() {

if fonction1 AND fonction2 === TRUE
echo 'bien'
else
echo 'pas bien'
}
c'est quoi l'ecriture correcte de ce code

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

23 juin 2011, 13:36

je te conseil de revoir les test (surtout logique avec php)
function Grouperfonctions() {

if ((fonction1==true) && (fonction2() === TRUE)) {
echo 'bien'
else
echo 'pas bien'
}
sans parler de la syntaxe php.

Comme indiqué plus haut, tes questions n'ont pas de sens et tu peux y répondre toi même en écrivant la chose en français et réalisant l'algo dérrière (avec une syntaxe correcte).

Par contre, si au final c'est pour refaire une fonction existante ............


@+
Il en faut peu pour être heureux ......

devlop78
Invité n'ayant pas de compte PHPfrance

24 juin 2011, 03:59

function grouperFonctions() {

 return fonction1() && fonction2();

}
Mais je rejoins Moogli sur le principe.

Essaie aussi, et je sais que ce n'est pas toujours évident, c'est de l'auto-discipline, d'être cohérent dans tes choix de développement.

- Utilisation de camelCase/CamelCase
- utiliser true ou TRUE, mais alterner ça perturbe
- etc

Mammouth du PHP | 725 Messages

26 juin 2011, 04:26

comme ca??
<?php

class File_Check {
       
        private $fileName;
   
        public function __construct()
                        {
                        	
                        }
                   
        public function fileExists($fileName)
            {
                        	$this->fileName = $fileName;
                        	
                        if(file_exists($this->fileName))
                        {
                                        return TRUE;
                        }
                        else
                        {
                                        return FALSE;
                        }
        
        	}
        	
                   
        public function isFile($fileName)
        	{
                	$this->fileName = $fileName;
                        if(is_file($this->fileName))
                        {
										return TRUE;               
                        }
                        else
                        {
                                        return FALSE;
                        }
                           
            }
            
		        
			public function checkAndIncludeFile($fileName)
			{
				if (($this->fileExists($fileName)) AND  ($this->isFile($fileName)) == true) 
					{
						include $this->fileName;
					}
					else
					{
						include 'autre.php';
					}
			}

}

$check = new File_Check();
// $check->fileExists('home.php');
// $check->isFile('home.php');
// $check->checkFileAndInclude('home.php');
?>
 
comme ca je peux verifier separement, ou bien verifier avec toutes les fonctions des fichiers

devlop78
Invité n'ayant pas de compte PHPfrance

28 juin 2011, 04:02

Non, ça n'a pas de sens.

- Les indentations sont mauvaises, irrégulières. Regarde du côté des conventions de codage proposé par Zend. C'est une convention comme une autre, tu l'utilises ou tu l'utilises pas, mais ça te donnera des idées. Pareil pour les true/TRUE

- Ensuite, c'est un problème de fond. Tu dis à chaque méthode, d'enregistrer dans l'objet, le nom du fichier. Par la suite, soit tu réutilises le même nom de fichier (pourquoi lui redonner alors ?), soit tu lui en donnes un autre. Tout ça n'est pas logique.

Donc, deux chois :

Soit tu fais une classe "statique" de vérification de fichiers. C'est alors une classe-outil si je puis dire :
// File_Check::fileExists('home.php');
// File_Check::isFile('home.php');
// File_Check::checkFileAndInclude('home.php');
Soit tu fais une classe objet de fichier :
Class File
  void __construct ($filename)
  bool exists ()
  bool isFile ()
  void include ()  // Vérifie avec exists (), si false, émet une exception
Ce qui donnera
$fichier = new File ('home.php');
if ($fichier->exists == true)
{
  $fichier->include ();
}

Mammouth du PHP | 725 Messages

28 juin 2011, 04:11

j'ai mis fonction par fonction afin de pouvoir les utiliser separement, en autre sens, si je veux utiliser seulement fileExists je peux la faire sand recourir aux autres