interoperabilidade
21/Mai/2008 @ 14:03 Software

Alguém me explica porque é que nesta função em PHP a correr num servidor Linux funciona perfeitamente do lado do IIS/ASP.NET/C# se usar o mt_rand e me dá um erro de Out Of Memory se usar o mt_srand ?
Não perdi muito tempo com o assunto, resolvi de outro modo, mas beats me!

Função PHP a correr em LAMP:

function create_pass() {

$length = 10;
$password="";
$possible="0123456789abcdefghijklmnopqrstuvxwyzABCDEFGHIJKLMNO....  etc.";
srand((double)microtime()*1000000); $i = 0; while ($i < $length) { $char = substr($possible, mt_rand(0, strlen($possible)-1, 1); if (!strstr($password, $char)) { $password .= $char; $i++; } } return $password; } // create_pass()

Função ASP.NET/C# a correr em Windows. Esta função leva como parâmetro um URL para o ficheiro PHP no qual está a função acima:

public static string createNewUserData(string URL)
{
WebRequest request = WebRequest.Create(URL);

request.Proxy = null;

request.Credentials = CredentialCache.DefaultCredentials;
HTTPWebResponse response = (HTTPWebResponse)request.GetResponse();

Console.WriteLine (response.StatusDescription);

Stream dataStream = response.GetResponseStream();
StreamReader reader = new StreamReader(dataStream);

string responseFromServer = reader.ReadToEnd();

reader.Close();
dataStream.Close();
response.Close();

return (responseFromSever);

}  // createNewUserData


Presumo
, não sei, que tenha a ver com o tamanho da resposta recebida na função em C# que talvez seja muito grande para guardar numa string.

Acho que com isto, tirava a dúvida:

StringBuilder responseFromServer =  new StringBuilder();
responseFromServer.Append(reader.ReadToEnd());
GC.Collect();

Anyway… so much for interoperability.

-MG
rss 4 pás de carvão
  1. 21/Mai/2008 | 15:03

    while (i < $length)
    isto foi copy&paste ou foi um typo? while($i<$length), nem sei se tem a ver com o caso, mas foi só uma observação


    A usar Mozilla Firefox Mozilla Firefox 2.0.0.14 em Windows Windows XP
  2. 21/Mai/2008 | 15:04

    ah alteraste antes deste “shot”


    A usar Mozilla Firefox Mozilla Firefox 2.0.0.14 em Windows Windows XP
  3. 21/Mai/2008 | 21:29

    O mt_srand não devolve um número aleatório, só inicializa a seed para o mt_rand().

    Anyway, toma lá uma versão optimizada :)

    function mkpass($len = 10) {
    $possible = ‘abcdefABCDEF09…’;
    $possible = str_split($possible);
    shuffle($possible);
    return implode(”", array_slice($possible, 0, $len));
    }


    A usar Safari Safari 525.18 em Mac OS Mac OS X
  4. 21/Mai/2008 | 21:38

    @Pedro Cardoso: Sim, é verdade, mas o facto é que faz falhar do lado do Windows. Não tenho explicação.


    A usar Mozilla Firefox Mozilla Firefox 3.0 em Windows Windows Vista
atira-lhe uma pá de carvão

Nota: Todos os comentários são moderados.