Jump to content
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

Sign in to follow this  
Hipnoted

Zona de memória partilhada

Recommended Posts

Hipnoted

Boas,

Existe alguma maneira de usar alguma zona de memória partilhada em PHP, ou do género.

Questão é a seguinte, tenho uma função que dura aproximadamente 60 segundos que só a pode executar um utilizador de cada vez e estava a tentar controlar isso através do time(). Mas não estou a ver como implementar isso. Alguém já passou pelo mesmo?

Obrigado.


"Nunca discutas com um idiota. Eles arrastam-te até ao seu nível e depois ganham-te em experiência"

Share this post


Link to post
Share on other sites
Hipnoted

Pois mas o problema é, guardo onde? :)

Sessões não posso usar porque só controla uma sessão do browser... Por isso não sei.


"Nunca discutas com um idiota. Eles arrastam-te até ao seu nível e depois ganham-te em experiência"

Share this post


Link to post
Share on other sites
Hipnoted

Base de dados está fora de questão até porque não uso no projecto.

Ficheiros só em último recurso. Queria mesmo era um shared object ou do género... :)


"Nunca discutas com um idiota. Eles arrastam-te até ao seu nível e depois ganham-te em experiência"

Share this post


Link to post
Share on other sites
Hipnoted

Não existe. A única solução é usar a memória da máquina :

http://www.php.net/manual/en/intro.apc.php

Porém, dado o caso, na minha opinião seria uma enorme parvoíce usar isso em detrimento de outro método mais viável.

Mesmo assim com essa opção tinha de instalar isso, o que torna inviável...

Talvez vá para a opção dos ficheiros, não me agrada nada estar a abrir e escrever no ficheiro por cada acesso mas lá vai ter de ser... :S

Obrigado na mesma.


"Nunca discutas com um idiota. Eles arrastam-te até ao seu nível e depois ganham-te em experiência"

Share this post


Link to post
Share on other sites
Hipnoted

Porque não podes usar base de dados? Ou porque não usar um serviço?

Porque o projecto em princípio irá para o moodle e não quero ter mais dependências. Até agora não necessitei de BD e acho uma carga desnecessária estar a usar BD só por causa disto.


"Nunca discutas com um idiota. Eles arrastam-te até ao seu nível e depois ganham-te em experiência"

Share this post


Link to post
Share on other sites
Caya

Incluir um ficheiros é (quase sempre) mais rápido que fazer uma query à base de dados. Quando alguém executa essa função, guardas num ficheiro 'qualquercoisa.php' algo do género:

"<?php $time = ".time()."; ?>"

Depois cada vez que mais alguém tenta executar a função incluis esse ficheiro e fazes as verificações que quiseres.

Também poderias usar memcache ou algo do género, mas como não queres instalar mais nada, acho que a solução do ficheiro é a melhor (e a única talvez)...

Share this post


Link to post
Share on other sites
softklin

Bem, encontrei isto:

http://php.net/manual/en/book.sem.php

No entanto, nunca trabalhei com tal coisa, apenas sei alguma teoria de semáforos e memória partilhada, mas nunca mexi em PHP, daí não sei se será isso que queres ou não.


Nick antigo: softclean | Tens um projeto? | Wiki P@P

Ajuda a comunidade! Se encontrares algo de errado, usa a opção "Denunciar" por baixo de cada post.

Share this post


Link to post
Share on other sites
Hipnoted

Bem, encontrei isto:

http://php.net/manual/en/book.sem.php

No entanto, nunca trabalhei com tal coisa, apenas sei alguma teoria de semáforos e memória partilhada, mas nunca mexi em PHP, daí não sei se será isso que queres ou não.

Já tinha visto isso mas só agora tive oportunidade de testar a memória partilhada em PHP. Mas tem um senão... isso não funciona em Windows, e o servidor possui Windows.

É de longe carga desnecessária, é pior usar ficheiros ou a memória do servidor.

Seria desnecessária porque apenas iria usar BD para controlar isto, e teria de pedir acesso a senhas, permissões, etc etc etc ao administrador do Moodle onde vai ficar o projecto. No entanto eu estava a ver mal as coisas, esqueci-me que a parte lógica do projecto (PHPs e afins) vai ficar no servidor onde tenho agora o projecto, por isso não há nenhum problema em usar BDs.

Incluir um ficheiros é (quase sempre) mais rápido que fazer uma query à base de dados. Quando alguém executa essa função, guardas num ficheiro 'qualquercoisa.php' algo do género:

"<?php $time = ".time()."; ?>"

Depois cada vez que mais alguém tenta executar a função incluis esse ficheiro e fazes as verificações que quiseres.

Também poderias usar memcache ou algo do género, mas como não queres instalar mais nada, acho que a solução do ficheiro é a melhor (e a única talvez)...

Gostei dessa opção. Juntando ao facto de ser eu a controlar as permissões do servidor acho que vou seguir este caminho. Se não der, uso BD!

Obrigado.


"Nunca discutas com um idiota. Eles arrastam-te até ao seu nível e depois ganham-te em experiência"

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.