Je veux diviser énormes fichiers (pour être spécifique, tar.gz fichiers) dans plusieurs parties du code PHP. Raison principale de faire cela est que la limite de 2 Go de PHP sur le système 32bit. P>
Donc, je veux diviser les gros fichiers en plusieurs parties et traiter chaque partie séparément. P>
est-ce possible? Si oui, comment? P>
9 Réponses :
php elle-même pourrait ne pas être capable de ...
Si vous pouvez déterminer comment procéder à la ligne de commande de votre ordinateur,
Vous devriez être capable d'exécuter ces commandes à l'aide de exécuté (); code> p>
EXEC pourrait être désactivé pour de nombreux hôtes partagés afin de ne pas fonctionner pour moi
Ceci serait probablement possible dans PHP, mais PHP a été construit pour le développement Web et qui tente de toute cette opération dans une demande entraînera le délai de demande. P>
Vous pouvez cependant utiliser une autre langue comme Java ou C # et créer un processus d'arrière-plan que vous pouvez notifier à partir de PHP pour effectuer l'opération. Ou même exécuter de PHP, en fonction de vos paramètres de sécurité sur l'hôte. P>
hjsplit p>
Je pense que cela ne fonctionnera pas comme PHP sur le système 32bits ne peut même pas fopen des fichiers de plus de 2 Go.
Mon commentaire a été voté à deux reprises, alors je suppose que ma suppose était sur quelque chose: p
Si sur un environnement UNIX, essayez-le ... p>
exec('split -d -b 2048m file.tar.gz pieces');
Très intéressant .. Vaut certainement la peine d'être plus intéressante ... +1 pour le concept
Une méthode simple (si vous utilisez le serveur basé sur Linux) consiste à utiliser la commande Voir ici pour plus de détails: http://www.computerhope.com/unix/usplit.htm p> ou vous pouvez utiliser: http: //www.computerhope. COM / UNIX / UCSPLIT.HTM P> exécutée code> et à exécuter la commande scindinal code>: exec('csplit -k -s -f part_ -n 3 LargeFile.tar.gz');
EXEC pourrait être désactivé pour de nombreux hôtes partagés afin de ne pas fonctionner pour moi
C'était mon hypothèse que s'il était sur l'hébergement partagé, il n'aurait pas un si gros fichier sur le serveur.
function split_file($source, $targetpath='/split/', $lines=1000){
$i=0;
$j=1;
$date = date("m-d-y");
$buffer='';
$handle = fopen ($_SERVER['DOCUMENT_ROOT'].$source, "r");
while (!feof ($handle)) {
$buffer .= fgets($handle, 4096);
$i++;
if ($i >= $lines) {
$fname = $_SERVER['DOCUMENT_ROOT'].$targetpath."part_".$date.$j.".txt";
$fhandle = fopen($fname, "w") or die($php_errormsg);
if (!$fhandle) {
echo "Cannot open file ($fname)";
//exit;
}
if (!fwrite($fhandle, $buffer)) {
echo "Cannot write to file ($fname)";
//exit;
}
fclose($fhandle);
$j++;
$buffer='';
$i=0;
$line+=10; // add 10 to $lines after each iteration. Modify this line as required
}
}
fclose ($handle);
}
$handle = fopen('source/file/path','r');
$f = 1; //new file number
while(!feof($handle))
{
$newfile = fopen('newfile/path/'.$f.'.txt','w'); //create new file to write to with file number
for($i = 1; $i <= 5000; $i++) //for 5000 lines
{
$import = fgets($handle);
//print_r($import);
fwrite($newfile,$import);
if(feof($handle))
{break;} //If file ends, break loop
}
fclose($newfile);
$f++; //Increment newfile number
}
fclose($handle);
Les scissions sont nommées comme nom_file.part0 fichier.part1 ...
C'est pas i> une tâche pour PHP. Quel système d'exploitation êtes-vous sur?
SPLIT -B -B 2048 m File.TAR.GZ Morceaux Code> UtilisationEXEC () code>?@alex très intéressant ....