Tonga 1 Denunciar post Postado Julho 6, 2012 Bom dia a todos. Eu tenho uma matriz 100x10 em uma página PHP, e preciso realizar um cálculo de probabilidades com esta matriz. Só que este cálculo é pesado e se torna inviável realiza-lo com o próprio PHP. Portanto passei este cálculo para um programa desenvolvido em C/C++ (Linux). O sistema deverá funcionar da seguinte forma: O PHP envia a matriz 100x10 para o programa, este programa realiza o cálculo e devolve ao PHP uma matriz que também é 100x10. A minha dúvida é justamente como passar a matriz do PHP para o executável, e como receber a resposta do executável. Dúvida: Posso passar a matriz através do comando exec() por exemplo ? Como faço para o meu executável receber esta matriz ? Ele receberá através dos argumentos ? Se receber será criado automaticamente um argumento para cada posição da matriz ? Ou tem como receber a matriz inteira através de um único argumento ? E para devolver ao PHP ? Como o executável iria fazer para devolver uma matriz 100x10 ao PHP ? Desculpa se já existe alguma resposta para isso, mas eu pesquisei e não achei nada que respondesse á estas perguntas, somente exemplos simples da utilização dos comandos php para chamar executáveis. Segue um exemplo da Matriz que preciso passar do PHP para o Executável. Uma Matriz no mesmo formato deve ser devolvida do Executável para o PHP. $Matriz = array( 'linha_00'=> array(10, 20, 12, 30, 65, 7, 129, 932, 71, 0), 'linha_01'=> array(27, 620, 192, 15, 214, 4, 201, 82, 75, 8), 'linha_02'=> array(4, 201, 82, 75, 87, 62, 14, 20, 12, 1), 'linha_03'=> array(38, 222, 2, 35, 87, 2, 14, 85, 129, 932), . . . . 'linha_99'=> array(87, 2, 14, 85, 192, 15, 214, 4, 13, 98) ); Desde já agradeço a ajuda. Compartilhar este post Link para o post Compartilhar em outros sites
hufersil 145 Denunciar post Postado Julho 6, 2012 JSON :D @braços Compartilhar este post Link para o post Compartilhar em outros sites
Tonga 1 Denunciar post Postado Julho 6, 2012 Desculpa, mas não entendi. um meio viável e criar uma extensão veja o aplicativo "swig": http://www.swig.org/Doc1.3/Php.html caso queira se aprofundar, procure os livros: Extending and Embedding PHP Building Custom PHP Extensions veja também o "hiphop-for-php" http://developers.facebook.com/blog/post/2010/02/02/hiphop-for-php--move-fast/ é um "conversor" de PHP para C, desevolvimento pelos engenheiros PHP do facebook Compartilhar este post Link para o post Compartilhar em outros sites
hufersil 145 Denunciar post Postado Julho 6, 2012 Bom, vamos lá: Problema enviado: passar dados de uma aplicação para outra por linha de comando. Solução Proposta: JSON Procurando um pouquinho no Google, você cai no site http://www.json.org/ que tem excelentes referências. Passando isso para linha de comando, com o comando EXEC que você mesmo mencionou: Do PHP para outra aplicação: $matrizEmJson = json_encode($matrizBemGrandeEmPHP); exec('c:\minha\outra\aplicacao.exe ' . $matrizEmJson); Veja que ela foi passada como argumento na chamada (argv). Assim sendo, usando como referência o site (e sugestão citada no primeiro post), é só você pegar esta string enviada para o C++ e transformar em objeto/matriz nativa do C++ e usar. A mesma coisa seria do C++ para o PHP. No site que passei, tem bibliotecas que fazem a conversão de objetos em C++ para JSON. Não conheço C++, mas deve ter uma forma de chamar um executável por dentro dele. Logo, você chamaria a linha de comando, passando o executável do PHP, com o script a ser executado E a string em JSON. C:\caminho\do\php.exe c:\caminho\do\arquivo.php string_em_json Dentro do PHP, você decodifica ela com json_decode. if(!empty($argv) && !empty($argv[1])){ $matrizBemGrande = json_decode($argv[1]); } @braços e fique com Deus! nota: tomei duas qualificações negativas tentando ajudar... é o tipo de coisa que desanima na hora de ajudar :( Compartilhar este post Link para o post Compartilhar em outros sites
Beraldo 864 Denunciar post Postado Julho 6, 2012 sockets são uma boa forma de comunicação inter-processos. A API de sockets Unix do C e do PHP são bem semelhantes e fáceis de usar a solução ideal depende do propósito, do tempo de execução desse programa em C e outros fatores. Os sockets, assim como a solução em JSON sugerida, exigem que os dois processos estejam sendo executados. Talvez não seja essa a sua intenção. Caso queira encerrar o processo PHP enquanto o C é executado, precisará salvar em algum lugar, como arquivo ou banco de dados Compartilhar este post Link para o post Compartilhar em outros sites
Tonga 1 Denunciar post Postado Julho 10, 2012 nota: tomei duas qualificações negativas tentando ajudar... é o tipo de coisa que desanima na hora de ajudar :( Bom dia. Eu fui uma das pessoas que o negativou. Desculpa, mas de uma olhada na sua primeira resposta. Você não disse absolutamente nada. Simplesmente colocou uma sigla. Me desculpa mas isto não é uma resposta, simplesmente está poluindo o tópico. Não seja sucinto em suas repostas. O objetivo dos tópicos não é que você resolva o problema pra quem o criou, mas sim que você mostre o caminho para o qual a pessoa deve ir. Tenha sempre isto em mente na hora de responder um tópico. Se você tivesse ao menos colocado algo do tipo "Procura no google por JSON", eu até teria considerado como uma resposta útil. Mas veja pelo lado positivo, as negativações o fizeram escrever uma resposta muito boa (a qual eu recomendei =D). Dúvida: Posso passar a matriz através do comando exec() por exemplo ? Como faço para o meu executável receber esta matriz ? Ele receberá através dos argumentos ? Se receber será criado automaticamente um argumento para cada posição da matriz ? Ou tem como receber a matriz inteira através de um único argumento ? E para devolver ao PHP ? Como o executável iria fazer para devolver uma matriz 100x10 ao PHP ? Bom dia Pessoal. Eu fiz uma pesquisa mais profunda no feriado sobre este assunto, inclusive verificando as sugestões aqui fornecidas, e cheguei a conclusão de que para esta situação a melhor solução seria trafegar as informações através de arquivo, ou de banco de dados. Ou seja: Arquivo 1) Dentro do PHP transformar as informações da matriz em caracteres e colocá-los em um arquivo de texto. 2) Chamar o executável. 3) O Executável lê as informações do arquivo texto, as processa, devolve o resultado (uma outra matriz) para o arquivo texto e é finalizado. 4) O PHP lê a matriz, já processada, que está armazenada no arquivo texto. Banco de Dados 1) Dentro do PHP envia a matriz para o banco de dados. 2) Chamar o executável. 3) O Executável lê a matriz que está armazenada no banco de dados, a processa, devolve o resultado (uma outra matriz) para o banco de dados e é finalizado. 4) O PHP lê a matriz, já processada, que está armazenada no banco de dados. Por que escolhi estas soluções ? Porque não envolve alterações no PHP (extensões), o processo (manipulação de banco de dados e arquivos de texto) é simples e de conhecimento geral (facilita a manutenção do código), fácil de se implementar e fácil de se portar. Muito Obrigado a todos pela ajuda. Compartilhar este post Link para o post Compartilhar em outros sites
Beraldo 864 Denunciar post Postado Julho 10, 2012 crie um lock para o arquivo. assim evita que os dois programas tentem acessá-los ao mesmo tempo :thumbsup: Compartilhar este post Link para o post Compartilhar em outros sites