Problème d'accès au répertoire en cron SPIP

Bonjour,

J’ai un petit soucis avec une tâche qui s’execute en tache de fond…

Je me suis fait un plugin pour gérer des propriété immobilière et chaque jour, via FTP, Centris (un organisme du Québec qui gère l’ensemble des propriétés a vendre), vient déposer, via FTP, un fichier ZIP qui contient des fichier CSV que je dois traiter…

Lorsque je suis connecté via l’interface /ecrire de spip et que j’execute manuellement la tâche, dans ?exec=job_queue tout fonctionne…

Mais quand elle doit s’excuser toute seule et qu’il n’y a pas d’admin de connecté, ça ne fonctionne pas…

Dans mon script, j’ai ceci :

$repertoire_centris = ‹ …/centris ›;
$fichiers = array_filter(scandir($repertoire_centris, SCANDIR_SORT_DESCENDING),function ($item) {
return 0 !== strpos($item, ‹ . ›);
});
$fichier = $fichiers[0];

Qui me permet de récupérer le nom du fichier le plus récent qui a été uploadé par centris…

Quand je l’execute manuellement par exec=job_queue il y a toujours une valeur dans $fichier …

Mais quand il s’execute tout seul (j’ai mis un cron sur mon serveur pour appeler ?action=cron tout les 10 minutes), $fichier est toujours vide….

Est-ce que j’ai quelque chose a ajouter pour un droit quelconque pour accéder aux répertoire ou quelque chose du genre que j’aurais oublié ?

Voici plus bas, le début de mon code complet pour cette fonction… En mode automatique, ça bloque toujours au dernier if de ce bout de code…

Merci !

spip_log(‹ Coucou – Genie Immobilier ›,‹ import_centris. ›._LOG_ERREUR);
if(!function_exists(‹ lire_config ›)) include_spip(‹ inc/config ›);

// on récupère le nom du dernier fichier zip qui a été traité

$dernier_fichier_importe = lire_config(‹ immobilier_centris_derniere_maj ›);

// On regardes le nom du fichier zip actuellement le plus récent

$repertoire_centris = ‹ …/centris ›;
$fichiers = array_filter(scandir($repertoire_centris, SCANDIR_SORT_DESCENDING),function ($item) {
return 0 !== strpos($item, ‹ . ›);
});
$fichier = $fichiers[0];

// Si les 2 nom de fichiers sont identique, rien a faire, on sort !
//spip_log($fichier,‹ import_centris. ›._LOG_ERREUR);
//spip_log($dernier_fichier_importe,‹ import_centris. ›._LOG_ERREUR);
if ($fichier == $dernier_fichier_importe) {
spip_log(‹ fichier zip déjà importé, on sort ›,‹ import_centris. ›._LOG_ERREUR);
return;
}

include_spip(‹ inc/documents ›);

// S’il n’y a pas de fichier dans le repertoire, on peut arrêter ici !
spip_log(‹ Les conditions semble réunies… On va pouvoir procéder ›,‹ import_centris. ›._LOG_ERREUR);
spip_log(‹ Sauf si $fichier est vide ›,‹ import_centris. ›._LOG_ERREUR);

if (!$fichier) return;

David Fredette

Le 20/12/2018 à 15:54, David Fredette a écrit :

J'ai un petit soucis avec une tâche qui s'execute en tache de fond…
Je me suis fait un plugin pour gérer des propriété immobilière et chaque jour, via FTP, Centris (un organisme du Québec qui gère l'ensemble des propriétés a vendre), vient déposer, via FTP, un fichier ZIP qui contient des fichier CSV que je dois traiter…
Lorsque je suis connecté via l'interface /ecrire de spip et que j'execute manuellement la tâche, dans ?exec=job_queue tout fonctionne…
Mais quand elle doit s'excuser toute seule et qu'il n'y a pas d'admin de connecté, ça ne fonctionne pas…

Tu accèdes au fichier par une adresse relative,
mais il est possible que tu ne sois pas au même endroit dans l'arbo des fichiers quand c'est le vrai cron.

spip_log un getcwd() et tu verras où ton ../centris mène

Et dans ton script de toute façon tu devrais faire un is_dir avant de faire le scandir

JL

Dans mon script, j'ai ceci :

$repertoire_centris = '../centris';
$fichiers = array_filter(scandir($repertoire_centris, SCANDIR_SORT_DESCENDING),function ($item) {
return 0 !== strpos($item, '.');
});
$fichier = $fichiers[0];

Qui me permet de récupérer le nom du fichier le plus récent qui a été uploadé par centris…

Quand je l'execute manuellement par exec=job_queue il y a toujours une valeur dans $fichier …

Mais quand il s'execute tout seul (j'ai mis un cron sur mon serveur pour appeler ?action=cron tout les 10 minutes), $fichier est toujours vide….

Est-ce que j'ai quelque chose a ajouter pour un droit quelconque pour accéder aux répertoire ou quelque chose du genre que j'aurais oublié ?

Voici plus bas, le début de mon code complet pour cette fonction… En mode automatique, ça bloque toujours au dernier if de ce bout de code…

Merci !

spip_log('Coucou -- Genie Immobilier','import_centris.'._LOG_ERREUR);
if(!function_exists('lire_config'))include_spip('inc/config');

// on récupère le nom du dernier fichier zip qui a été traité

$dernier_fichier_importe = lire_config('immobilier_centris_derniere_maj');

// On regardes le nom du fichier zip actuellement le plus récent

$repertoire_centris = '../centris';
$fichiers = array_filter(scandir($repertoire_centris, SCANDIR_SORT_DESCENDING),function ($item) {
return 0 !== strpos($item, '.');
});
$fichier = $fichiers[0];

// Si les 2 nom de fichiers sont identique, rien a faire, on sort !
//spip_log($fichier,'import_centris.'._LOG_ERREUR);
//spip_log($dernier_fichier_importe,'import_centris.'._LOG_ERREUR);
if ($fichier == $dernier_fichier_importe) {
spip_log('fichier zip déjà importé, on sort','import_centris.'._LOG_ERREUR);
return;
}
include_spip('inc/documents');

// S'il n'y a pas de fichier dans le repertoire, on peut arrêter ici !
spip_log('Les conditions semble réunies... On va pouvoir procéder','import_centris.'._LOG_ERREUR);
spip_log('Sauf si $fichier est vide','import_centris.'._LOG_ERREUR);
if (!$fichier) return;

David Fredette

Le 20 déc. 2018 à 12:08, JLuc <jluc@no-log.org> a écrit :

Le 20/12/2018 à 15:54, David Fredette a écrit :

J’ai un petit soucis avec une tâche qui s’execute en tache de fond…
Je me suis fait un plugin pour gérer des propriété immobilière et chaque jour, via FTP, Centris (un organisme du Québec qui gère l’ensemble des propriétés a vendre), vient déposer, via FTP, un fichier ZIP qui contient des fichier CSV que je dois traiter…
Lorsque je suis connecté via l’interface /ecrire de spip et que j’execute manuellement la tâche, dans ?exec=job_queue tout fonctionne…
Mais quand elle doit s’excuser toute seule et qu’il n’y a pas d’admin de connecté, ça ne fonctionne pas…

Tu accèdes au fichier par une adresse relative,
mais il est possible que tu ne sois pas au même endroit dans l’arbo des fichiers quand c’est le vrai cron.

spip_log un getcwd() et tu verras où ton …/centris mène

Et dans ton script de toute façon tu devrais faire un is_dir avant de faire le scandir

Ok… Est-ce qu’il y a une variable globale de spip pour avoir le path de la racine du site que je pourrais inclure avant mon « centris » …

JL

Dans mon script, j’ai ceci :
$repertoire_centris = ‹ …/centris ›;
$fichiers = array_filter(scandir($repertoire_centris, SCANDIR_SORT_DESCENDING),function ($item) {
return 0 !== strpos($item, ‹ . ›);
});
$fichier = $fichiers[0];
Qui me permet de récupérer le nom du fichier le plus récent qui a été uploadé par centris…
Quand je l’execute manuellement par exec=job_queue il y a toujours une valeur dans $fichier …
Mais quand il s’execute tout seul (j’ai mis un cron sur mon serveur pour appeler ?action=cron tout les 10 minutes), $fichier est toujours vide….
Est-ce que j’ai quelque chose a ajouter pour un droit quelconque pour accéder aux répertoire ou quelque chose du genre que j’aurais oublié ?
Voici plus bas, le début de mon code complet pour cette fonction… En mode automatique, ça bloque toujours au dernier if de ce bout de code…
Merci !
spip_log(‹ Coucou – Genie Immobilier ›,‹ import_centris. ›._LOG_ERREUR);
if(!function_exists(‹ lire_config ›))include_spip(‹ inc/config ›);
// on récupère le nom du dernier fichier zip qui a été traité
$dernier_fichier_importe = lire_config(‹ immobilier_centris_derniere_maj ›);
// On regardes le nom du fichier zip actuellement le plus récent
$repertoire_centris = ‹ …/centris ›;
$fichiers = array_filter(scandir($repertoire_centris, SCANDIR_SORT_DESCENDING),function ($item) {
return 0 !== strpos($item, ‹ . ›);
});
$fichier = $fichiers[0];
// Si les 2 nom de fichiers sont identique, rien a faire, on sort !
//spip_log($fichier,‹ import_centris. ›._LOG_ERREUR);
//spip_log($dernier_fichier_importe,‹ import_centris. ›._LOG_ERREUR);
if ($fichier == $dernier_fichier_importe) {
spip_log(‹ fichier zip déjà importé, on sort ›,‹ import_centris. ›._LOG_ERREUR);
return;
}
include_spip(‹ inc/documents ›);
// S’il n’y a pas de fichier dans le repertoire, on peut arrêter ici !
spip_log(‹ Les conditions semble réunies… On va pouvoir procéder ›,‹ import_centris. ›._LOG_ERREUR);
spip_log(‹ Sauf si $fichier est vide ›,‹ import_centris. ›._LOG_ERREUR);
if (!$fichier) return;
David Fredette


liste spip
spip@rezo.net - désabonnement : envoyer un mail à spip-off@rezo.net

Archives : https://www.mail-archive.com/spip@rezo.net/maillist.html

Infos : https://listes.rezo.net/mailman/listinfo/spip

Documentation de SPIP : http://www.spip.net/

Irc : de l’aide à toute heure : http://spip.net/irc

Le 21/12/2018 à 19:51, David Fredette a écrit :

Le 20 déc. 2018 à 12:08, JLuc <jluc@no-log.org <mailto:jluc@no-log.org>> a écrit :

Le 20/12/2018 à 15:54, David Fredette a écrit :

J'ai un petit soucis avec une tâche qui s'execute en tache de fond…
Je me suis fait un plugin pour gérer des propriété immobilière et chaque jour, via FTP, Centris (un organisme du Québec qui gère l'ensemble des propriétés a vendre), vient déposer, via FTP, un fichier ZIP qui contient des fichier CSV que je dois traiter…
Lorsque je suis connecté via l'interface /ecrire de spip et que j'execute manuellement la tâche, dans ?exec=job_queue tout fonctionne…
Mais quand elle doit s'excuser toute seule et qu'il n'y a pas d'admin de connecté, ça ne fonctionne pas…

Tu accèdes au fichier par une adresse relative,
mais il est possible que tu ne sois pas au même endroit dans l'arbo des fichiers quand c'est le vrai cron.

spip_log un getcwd() et tu verras où ton ../centris mène

Et dans ton script de toute façon tu devrais faire un is_dir avant de faire le scandir

Ok… Est-ce qu'il y a une variable globale de spip pour avoir le path de la racine du site que je pourrais inclure avant mon "centris" …

La constante _DIR_RACINE ?
https://code.spip.net/autodoc/tree/ecrire/inc_version.php.html#constant__DIR_RACINE