Bonjour,
J'ai un problème vraiment bizarre sur lequel je suis en train de me tirer les cheveux, alors s'il y avait une bonne âme qui pouvait m'aider avant qu'il ne m'en reste plus !!!
J'ai un premier fichier script (test.php) qui me permet d'en lancer un autre (write.php) en tâche de fond avec deux variables à transmettre.
Code de test.php :
<?php
$numfile = $_GET['num'];
$uploadID = $_GET['upload_id'];
exec("/usr/bin/php write.php $numfile $uploadID > /dev/null &");
?>
Code de write.php :
<?php
$ftemp = fopen ("tmp/resultat.txt", "w");
$numfile = $argv[1];
$uploadID = $argv[2];
fwrite ($ftemp, "transmission des données par exec\n\n");
fwrite ($ftemp, "numfile : '$numfile'\n");
fwrite ($ftemp, "uploadID : '$uploadID'\n\n");
require("temp.php");
$fichier = $nom_fichier[$numfile];
fwrite ($ftemp, "fichier : '$fichier'\n\n");
$local_file="uploads/$uploadID/".$fichier;
fwrite ($ftemp, "local_file : '$local_file'\n");
if (is_file($local_file)) {
fwrite ($ftemp, "local_file '$local_file' existe\n\n");
} else {
fwrite ($ftemp, "local_file '$local_file' n'existe pas\n\n");
}
$temp_dir = "tmp/".$uploadID;
fwrite ($ftemp, "temp_dir : '$temp_dir'\n");
if (is_dir($temp_dir)) {
fwrite ($ftemp, "répertoire temp_dir '$temp_dir' existe\n\n");
} else {
fwrite ($ftemp, "répertoire temp_dir '$temp_dir' n'existe pas\n\n");
}
$file_temp = $temp_dir."/upload_".$fichier.".txt";
fwrite ($ftemp, "file_temp : '$file_temp'\n");
if (is_file($file_temp)) {
fwrite ($ftemp, "file_temp '$file_temp' existe\n\n");
} else {
fwrite ($ftemp, "file_temp '$file_temp' n'existe pas\n\n");
}
fwrite ($ftemp, "ecriture via exec OK\n");
fclose ($ftemp);
chmod ("tmp/resultat.txt",0777);
?>
Code de temp.php
<?php
$nom_fichier[0] = 'Fichier_test_1.zip';
$nom_fichier[1] = 'Fichier_test_2.zip';
$nom_fichier[2] = 'Fichier_test_3.zip';
?>
En lançant mon script.php avec les variables (test.php?upload_id=fe77f2cf2562d6c04010296cb400fc5b&num=0), voici ce que j'obtiens dans mon fichier "resultat.txt" :
transmission des données par exec
numfile : '0'
uploadID : 'fe77f2cf2562d6c04010296cb400fc5b'
fichier : 'Fichier_test_1.zip'
local_file : 'uploads/fe77f2cf2562d6c04010296cb400fc5b/Fichier_test_1.zip'
local_file 'uploads/fe77f2cf2562d6c04010296cb400fc5b/Fichier_test_1.zip' existe
temp_dir : 'tmp/fe77f2cf2562d6c04010296cb400fc5b'
répertoire temp_dir 'tmp/fe77f2cf2562d6c04010296cb400fc5b' existe
file_temp : 'tmp/fe77f2cf2562d6c04010296cb400fc5b/upload_Fichier_test_1.zip.txt'
file_temp 'tmp/fe77f2cf2562d6c04010296cb400fc5b/upload_Fichier_test_1.zip.txt' n'existe pas
ecriture via exec OK
Il me dit que mon fichier upload_Fichier_test_1.zip.txt (file_temp) n'existe pas alors qu'il existe bien !!!!
J'ai essayé de modifier le script write.php de cette façon (transmission des données par get sans passer par test.php) :
Code de write.php modifié :
<?php
$ftemp = fopen ("tmp/resultat.txt", "w");
$numfile = $_GET['num'];
$uploadID = $_GET['upload_id'];
fwrite ($ftemp, "transmission des données par get\n\n");
fwrite ($ftemp, "numfile : '$numfile'\n");
fwrite ($ftemp, "uploadID : '$uploadID'\n\n");
require("temp_$uploadID.php");
$fichier = $nom_fichier[$numfile];
fwrite ($ftemp, "fichier : '$fichier'\n\n");
$local_file="uploads/$uploadID/".$fichier;
fwrite ($ftemp, "local_file : '$local_file'\n");
if (is_file($local_file)) {
fwrite ($ftemp, "local_file '$local_file' existe\n\n");
} else {
fwrite ($ftemp, "local_file '$local_file' n'existe pas\n\n");
}
$temp_dir = "tmp/".$uploadID;
fwrite ($ftemp, "temp_dir : '$temp_dir'\n");
if (is_dir($temp_dir)) {
fwrite ($ftemp, "répertoire temp_dir '$temp_dir' existe\n\n");
} else {
fwrite ($ftemp, "répertoire temp_dir '$temp_dir' n'existe pas\n\n");
}
$file_temp = $temp_dir."/upload_".$fichier.".txt";
fwrite ($ftemp, "file_temp : '$file_temp'\n");
if (is_file($file_temp)) {
fwrite ($ftemp, "file_temp '$file_temp' existe\n\n");
} else {
fwrite ($ftemp, "file_temp '$file_temp' n'existe pas\n\n");
}
fwrite ($ftemp, "ecriture via exec OK\n");
fclose ($ftemp);
chmod ("tmp/resultat.txt",0777);
?>
Le script temp.php reste inchangé…
En executant le script write.php modifié (write.php?upload_id=fe77f2cf2562d6c04010296cb400fc5b&num=0), voici ce que contient le fichier resultat.txt :
transmission des données par get
numfile : '0'
uploadID : 'fe77f2cf2562d6c04010296cb400fc5b'
fichier : 'Fichier_test_1.zip'
local_file : 'uploads/fe77f2cf2562d6c04010296cb400fc5b/Fichier_test_1.zip'
local_file 'uploads/fe77f2cf2562d6c04010296cb400fc5b/Fichier_test_1.zip' existe
temp_dir : 'tmp/fe77f2cf2562d6c04010296cb400fc5b'
répertoire temp_dir 'tmp/fe77f2cf2562d6c04010296cb400fc5b' existe
file_temp : 'tmp/fe77f2cf2562d6c04010296cb400fc5b/upload_Fichier_test_1.zip.txt'
file_temp 'tmp/fe77f2cf2562d6c04010296cb400fc5b/upload_Fichier_test_1.zip.txt' existe
ecriture via exec OK
Avec la version modifiée, il trouve bien le fichier upload_Fichier_test_1.zip.txt
Si quelqu'un a une idée pourquoi il ne trouve pas mon fichier avec la première version (bien sûr celle qui m'interesse !!), ce serait vraiment cool…