Разница между локальным хостом и сервером для распределения и использования памяти

У меня есть сценарий PHP, где я читаю из CSV и импортирую значения в массивы для расчета. Я создал этот большой скрипт на localhost, используя WAMP, и все работает правильно. Я поместил его в веб-сервер сейчас и получаю ошибку памяти примерно на полпути (которую я не получил на локальном хосте)

чтобы устранить неполадки, я вставил следующий код во все сегменты моего кода:

echo memory_get_usage();

и закомментировали все разделы и работали, пока не вышли ошибки.

В первом сегменте у меня выделено 2,16 МБ памяти для локального хоста и 1,29 МБ для веб-сервера.
на втором сегменте у меня есть выделение памяти 2,32 МБ для локального хоста и 1,57 МБ для веб-сервера.

Однако в третьем сегменте я получаю для localhost 3,32 МБ, но для сервера я получаю следующую ошибку:

Неустранимая ошибка: недостаточно памяти (выделено 326631424) (попытался выделить 71
байт) в / home / блаблабла

у кого-нибудь есть идея, что могло бы вызвать это? файл находится в том же каталоге, и вот код ниже. Это для футбольного калькулятора, который читает исторические статистические данные для подсчета очков фэнтези-футбола и имеет длину всего 194 строки

Я ни в коем случае не хороший программист и использую этот проект, чтобы по существу выучить мой первый язык. это был первый фрагмент кода, который я написал, поэтому я уверен, что он нуждается в переработке (и я, вероятно, это сделаю), но я не вижу ошибки, которая могла бы вызвать это. это количество массивов, которые я создаю? почему он будет работать на локальном сервере, а не на веб-сервере? использование сайта в качестве хостинга

Спасибо за то, что нашли время

$file_handle = fopen("football/Historical/QBHIST.csv", "r");    //opens historical csv file of qb

while (!feof($file_handle) ) {                      //while the end of file is not reached, populate arrays as listed below.

$line_of_text = fgetcsv($file_handle, 1024);        //line of text[n] is the value after each comma delimeter in the handle file
$PName = $line_of_text[0];                          //player name
$PTeam = $line_of_text[1];                          //team
$PPlays = $line_of_text[2];                         //plays played
$PGamesPlayed = $line_of_text[3];                   //games played
$PRushAtt = $line_of_text[4];                       //rush attempts
$PRushYd = $line_of_text[5];                        //rush yards
$PRushTD = $line_of_text[6];                        //rush td
$PPassAtt = $line_of_text[7];                       //pass attempts
$PPassComp = $line_of_text[8];                      //pass completions
$PPassYard = $line_of_text[9];                      //pass yards
$PPassTD = $line_of_text[10];                       //pass td
$PFumbLst = $line_of_text[11];                      //fumbles lost
$PIntThr = $line_of_text[12];                       //interceptions thrown
$PYear = $line_of_text[13];                         //season year
$PPos = $line_of_text[14];                          //player position
$PRecTD = $line_of_text[15];                        //receiving td
$PRecYd = $line_of_text[16];                        //receiving yards
$PRecCat = $line_of_text[17];                       //receptions
$PRecTar = $line_of_text[18];                       //targets
$PRecDrp = $line_of_text[19];                       //drops
$PIncThr = $PPassAtt - $PPassComp;                  //pass incompletions

if ($PGamesPlayed <= 0){                            //in case the CSV is wrong - Zeroes create weird results (but only have an effect in SUPER SUPER SUPER deep leagues (like 300+ players)
$PGamesPlayed = 1;
}if ($PassYdValue == 0){                     //these are to prevent n/0 errors.
$PassYdValue = 100000000000000000;
}

if ($RushYdValue == 0){
$RushYdValue = 100000000000000000;      //these are to prevent n/0 errors.
}

if ($RecYdValue == 0){
$RecYdValue = 100000000000000000;       //these are to prevent n/0 errors.
}

//points scored formula
$QBPoints =
($PPassTD * $PassTdValue) +
($PPassYard / $PassYdValue) +
($PPassComp * $PassCompValue) +
($PIntThr * $PassIntValue) +
($PIncThr * $PassIncValue) +
($PPassAtt * $PassAttValue) +
($PRushAtt * $RushAttValue) +
($PRushTD * $RushTdValue) +
($PRushYd / $RushYdValue) +
($RushFumbValue * $PFumbLst)  +
($PRecTD * $RecTdValue) +
($PRecYd / $RecYdValue) +
($PRecTar * $RecTarValue) +
($PRecCat * $RecCatValue) +
($ArrayKey / 10000000)* -1;                 //this arraykey/billion is to prevent duplicate scores that might have an effect. each player = unique score

$PointsArray[$ArrayKey] = $QBPoints;                        //populates arrays for calc'd points to remain UNSORTED
$NamesArray[$ArrayKey] = $PName;                            //populates array for player name
$YearArray[$ArrayKey] = $PYear;                             //populates array for year
$GamesArray[$ArrayKey] = $PGamesPlayed;                     //populates array for games played
$PTDArray[$ArrayKey] = $PPassTD;                            //populates array for pass td
$RTDArray[$ArrayKey] = $PRushTD;                            //populates array for rush td
$PYdArray[$ArrayKey] = $PPassYard;                          //populates array for pass yards
$RYdArray[$ArrayKey] = $PRushYd;                            //populates array for rush yards
$PPGArray[$ArrayKey] = $QBPoints / $PGamesPlayed;           //populates array for Points per game to remain UNSORTED
$PPGSortArray[$ArrayKey] = $QBPoints / $PGamesPlayed;       //populates array for Points per game to be SORTED
$PosArray[$ArrayKey] = "QB";                                //populates array for position

$PAttArray[$ArrayKey] = $PPassAtt;                          //populates array for PassATT
$PCompArray[$ArrayKey] = $PPassComp;                        //populates array for PassComp
$RAttArray[$ArrayKey] = $PRushAtt;                          //populates array for RushATT
$PIntArray[$ArrayKey] = $PIntThr;                           //populates array for interceptions thrown

$CatArray[$ArrayKey] = $PRecCat;                            //populates array for Catches
$CYdArray[$ArrayKey] = $PRecYd;                             //populates array for receiving yards
$CTDArray[$ArrayKey] = $PRecTD;                             //populates array for receiving TD

$FumbArray[$ArrayKey] = $PFumbLst;                          //populates array for fumbles

$ArrayKey = $ArrayKey + 1;
}

array_pop($PointsArray);
array_pop($NamesArray);
array_pop($YearArray);
array_pop($GamesArray);
array_pop($PTDArray);
array_pop($RTDArray);
array_pop($PYdArray);
array_pop($RYdArray);
array_pop($PPGArray);
array_pop($PPGSortArray);
array_pop($PosArray);
array_pop($PAttArray);
array_pop($RAttArray);
array_pop($PIntArray);
array_pop($CatArray);
array_pop($CYdArray);
array_pop($CTDArray);
//array_pop($GamesArray);

fclose($file_handle);                           //close your csv silly!

echo "<br>";
echo "made it to QB";
echo memory_get_usage();

0

Решение

Не совсем уверен в самом коде, но распределение памяти не статично. Тот факт, что WAMP на вашем локальном компьютере настроен на использование памяти, не означает, что установка php на ваш веб-сервер.

Я бы предложил настроить файл phpinfo и сравнить вашу версию php для WAMP с вашей размещенной версией. Вы должны быть в состоянии быстро увидеть различия между ними. Вы можете настроить локальную установку WAMP в соответствии с размещенной версией или попросить веб-хостинга изменить их.

Скорее всего, вам не повезет, если вы находитесь на общем сервере, но это того стоит.

Надеюсь, что это помогает некоторым.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]