Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > include и оперативная память


Автор: AlexSam 25.2.2007, 03:49
Встретил странную вещь - скрипт php запущен как cgi и работает , но если взять пару функций из него и вынести в отдельный файл и сделать include , то скрипту не хватает оперативы( пишет в логе, что не может realloc мне полтора килобайта ) - можно как-то решить?
И вообще как узнать сколько скрипт потребляет оперативы - а то один скрипт весит 800байт и не грузится , второй 1700 и работает, да и вообще нафиг такие ограничения?

Автор: ZlojEzh 25.2.2007, 10:57
Цитата(AlexSam @  25.2.2007,  03:49 Найти цитируемый пост)
И вообще как узнать сколько скрипт потребляет оперативы

memory_get_usage()

Цитата(AlexSam @  25.2.2007,  03:49 Найти цитируемый пост)
а то один скрипт весит 800байт и не грузится , второй 1700 и работает

от размера скрипта это мало зависит (по дефолту мемори_лимит, кажись, стоит 8МБ - неслабый скриптик может влезть).
скорее от размера памяти, выделяемой под переменные скрипта

Цитата(AlexSam @  25.2.2007,  03:49 Найти цитируемый пост)
но если взять пару функций из него и вынести в отдельный файл и сделать include , то скрипту не хватает оперативы

а вот это интересное наблюдение
сейчас буду тестить

Автор: Alex13 26.2.2007, 11:22
AlexSam, а можно пример этого скрипта? Ато ты заинтриговал меня...

Автор: AlexSam 27.2.2007, 00:33
Цитата

Ато ты заинтриговал меня... 

ну если заинтриговал... но походу дело не в скрипте (с разными скриптами это одно и тоже) - либо я чего-то не понимаю, либо настройки хоста...(хост платный).
Вот скрипт копирования файла. Ф-я GetVar читает переменную из файла, A_Decode декодирует строку (по типу url_decode).
Код

#!/usr/bin/php
<?
include "Include/GetVar.php";
include "Include/A_Decode.php";
echo("Content-Type: text/html\n\n");
$RealName=GetVar("Buffer/Buffer.var","FileName");
$UploadPath=$ZeroPath.GetVar("Buffer/Buffer.var","UploadPath");
$Page=A_Decode(GetVar("Buffer/Buffer.var","Page"));
@unlink("Buffer/Buffer.var");

    if(!is_dir($UploadPath)) mkdir($UploadPath);
    copy("Buffer/".$RealName, $UploadPath.$RealName);
    @unlink("Buffer/".$RealName);
    echo("<script>document.location='Menu.html?stpage=".$Page."&after=Upload'</script>");
?>

А вот инклюды (2 функции)
Код

<?php
function A_Decode($str)
{
$str=str_replace("%sem",';',$str);
$str=str_replace("%dot",'.',$str);
$str=str_replace("%quo","'",$str);
$str=str_replace("%dbq",'"',$str);
$str=str_replace("%col",',',$str);
$str=str_replace("%do",':',$str);
$str=str_replace("%bsl",'\\',$str);
$str=str_replace("%sla",'/',$str);
$str=str_replace("%vop",'?',$str);
$str=str_replace("%mai",'@',$str);
$str=str_replace("%spa",' ',$str);
return $str;}?>

Код

<?php
function GetVar($filename,$varname)
{
$vars=@file_get_contents($filename);
if(strpos($vars,$varname)===false) return null;
$pos1=strpos($vars,$varname)+strlen($varname)+1;
$pos2=strpos($vars,";",strpos($vars,$varname));
$Result=substr($vars,$pos1,$pos2-$pos1);
return $Result;
}
$ZeroPath="../../";
?>


Автор: Alex13 27.2.2007, 09:42
AlexSam, а если запустить как модуль apache, то работает?

Автор: Alex13 27.2.2007, 12:21
Сейчас проверил у себя как модуль - все работает. Очевидно, что-то не то с хостером.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)