Hallo allemaal, ik zit met de volgende vraag:
Deze regel geeft een waarschuwing in mijn code. (Warning = sizeof(): Parameter must be an array or an object that implements Countable in)
for($i=0; $i<sizeof($gpx_files); $i++) {
HTML_gpx::viewBatchImportTableRow($i+1, $gpx_files[$i]);


Enig zoekwerk doet mij vermoeden dat er "is_array" voor moet komen, maar hoe precies snap ik niet.

Jan
Ik ga het eens bekijken op mijn gemak, bedankt in ieder geval.

$gpx_files = scan_dir_f($dir, 0, 'FILETYPE_FILE', 'GPX');


scan_dir() is een standaard php-functie. Zo te zien heb jij een eigen variant hierop gemaakt scan_dir_f()

En die geeft iets anders terug dan een array, wat scan_dir() wel doet.
Wat geeft jouw functie wel terug? En is dat onder alle omstandigheden zo?

Bijvoorbeeld: als er geen files gevonden worden: wordt dan een leeg array teruggegeven? of komt er NULL of FALSE terug?
Voor de duidelijkheid ik heb helemaal niets gemaakt omdat ik niet kan programmeren, (toch niet in php)
Ik zoek alleen hulp omdat het gevonden oude script een aantal fouten gaf, de meeste heb ik zelf gevonden maar dit is de laatste waar ik geen oplossing voor vindt.
Alleen al antwoord geven op jullie vragen is al erg moeilijk voor mij ;-)
Gelukkig werkt het hele programma wel, dus haast is er niet bij.
Voor het gemak heb ik een [code] tag geplaatst waarbij je dus regelnummering ziet.
Maar je moet even zoeken in je codebase naar de function: scan_dir_f


// self-made function like 'scandir()' from PHP5
function scan_dir($dir, $sorting_order, $type) {
	$filelist = scan_dir_f($dir, $sorting_order, $type, 0);
	return $filelist;
}

// self-made extended scandir function with filetype filter
function scan_dir_f($dir, $sorting_order, $type, $filter) {
	// definitions of constants for 'type'
	$FILETYPE_ALL = 0;
	$FILETYPE_DIR = 1;
	$FILETYPE_FILE = 2;

	if(!is_int($type)) $type = $$type;
	clearstatcache();
	$dirhandle  = opendir($dir);
	while (false !== ($file = readdir($dirhandle))) {
    	if($file != "." && $file != "..") {
	   		switch($type) {
	   			case 0:
	    			$files[] = $file;
		    		break;
	   			case 1:
	    			if(is_dir($dir.$file)) $files[] = $file;
		    		break;
	   			case 2:
	    			if(is_file($dir.$file)) {
                        $ext = substr($file, strrpos($file, '.')+1);
                        if(!$filter || strtolower($ext) == strtolower($filter))
                        	$files[] = $file;
                    }
		    		break;
	    	}
	   	}
	}
	closedir($dirhandle);
	if(isset($files)) {	# prevents php warning
        if($sorting_order == 1) rsort($files);
        else                    sort($files);
    }
	return $files;
}
<?php
// self-made extended scandir function with filetype filter
function scan_dir_f($dir, $sorting_order, $type, $filter) {
$files = []; <= deze regel toevoegen
// definitions of constants for 'type'
$FILETYPE_ALL = 0;

?>
Ontzettend bedankt Ozzie, dat was inderdaad de oplossing.
Geen dank hoor. Succes met je project.
Fijn dat het is opgelost het ongewenste gedrag lijkt te zijn verdwenen, maar het is natuurlijk ook interessant om te achterhalen waarom deze melding (ineens?) de kop opsteekt.

Komt het misschien omdat er lege directories ergens binnen geslopen zijn?
Of wellicht heeft jouw webboer de PHP-versie gebumpt en/of de strictheid waarmee fouten worden gemeld opgevoerd?

Hoe dan ook, indien deze meldingen eerder niet optraden, en nu wel, houdt dat in dat er *iets* is veranderd, of dat er op een bepaalde manier andere condities gelden voor de omgeving waarin deze functionaliteit actief is.

Code (en haar werking) verandert/muteert doorgaans niet spontaan; het doet altijd precies datgene wat geschreven is.

NB sizeof() is een alias, gebruik bij voorkeur geen aliassen, want die kunnen op den duur obsolete raken/helemaal worden verwijderd.

Reageren