I-NOZex Posted September 19, 2013 at 04:42 PM Report #525205 Posted September 19, 2013 at 04:42 PM Boa tarde, tenho um projecto que usa a framework php YII juntamente com o YiiBooster/Boilerplate ( http://yiibooster.clevertech.biz/ ) o projecto fica extruturado da seguinte forma: [app_root] -backend (area de admin) -common (bibliotecas e extensoes comuns) -frontend (area frontal do site) ora, eu pretento fazer um "remote upload" na backend,e até ai tudo bem o meu problema é que queria ter uma pasta partilhada para os uploads, na [app_root] (digamos a pasta public_html) eu consigo fazer upload e ate guardar o link da imagem para a base de dados, mas uma vez que trabalho localmente (win7 32bits + easy php 13.1 V9), ao usar este codigo para gerar o caminho da pasta: realpath(Yii::getPathOfAlias('application').'/../assets/img/') ele gera um caminho do tipo: C:\Programaxao\EasyPHP\data\localweb\livetugayii\assets\img ... (para informação, Yii::getPathOfAlias('webroot') obtem o caminho da pasta backend) e como é obvio, ao tentar carregar a imagem pelo endereço na base de dados, ele tenta carregar: C:\Programaxao\EasyPHP\data\localweb\livetugayii\assets\img\imagem.jpg e nao dá... creio que o problema será só localmente... mas nao tou a ver como resolver... vi a falar algo sobre isto: http://php.net/manual/en/function.symlink.php mas não entendi muito bem o seu uso, e nao sei se funcionará tanto localmente como num servidor linux... Não creio que isto seja problema ao nivel da framework, por isso se nao conhecerem não se preocupem, qualquer outra boilerplate do genero iria gerar um problema igual Obrigado desde já 👍 B2R » Beat2Revolution v3.0b | Regista e divulga-nos beat2revolution.net
I-NOZex Posted September 19, 2013 at 06:29 PM Author Report #525224 Posted September 19, 2013 at 06:29 PM (edited) mais uma peqena informação: tou a usar virtualhosts do qual: admin.nomedosite.com vai para a backend e o nomedosite.com vai para a frontend Edited September 19, 2013 at 06:29 PM by I-NOZex B2R » Beat2Revolution v3.0b | Regista e divulga-nos beat2revolution.net
I-NOZex Posted September 20, 2013 at 01:51 PM Author Report #525331 Posted September 20, 2013 at 01:51 PM nenhuma sugestão ou opiniao? :| tou meio que entravado com isto... B2R » Beat2Revolution v3.0b | Regista e divulga-nos beat2revolution.net
brunoais Posted September 20, 2013 at 04:40 PM Report #525368 Posted September 20, 2013 at 04:40 PM Se fosse sem o Yii sei fazer. Agora com o Yii não sei o que há de diferente. "[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31 Life is a genetically transmitted disease, induced by sex, with death rate of 100%.
I-NOZex Posted September 20, 2013 at 06:26 PM Author Report #525383 Posted September 20, 2013 at 06:26 PM nao ligues ao facto de usar framework dame a tua sugestão se fosse em php puro, ate pode ser que solucione, no entanto eu arranjo alternativa de tendo essa base transformar para YII é que tou mesmo as cegas, uma luz qualquer era otimo! B2R » Beat2Revolution v3.0b | Regista e divulga-nos beat2revolution.net
Devexz Posted September 20, 2013 at 09:32 PM Report #525403 Posted September 20, 2013 at 09:32 PM podes mostrar a parte do código em que fazes o upload? E possivelmente a framework deve ter uma pasta própria para imagens, porque não fazes assim? /img - pasta "default" da framework - uploads - lá dentro crias uma pasta. Contador de calorias: caloriaspordia.com
Knitter Posted September 20, 2013 at 10:03 PM Report #525406 Posted September 20, 2013 at 10:03 PM Não guardes o caminho completo, guarda apenas o nome da imagem, e usa um URL construído depois por ti. Por exemplo, ao fazer uploads envio os dados para a pasta <public>/uploads, onde <public> é a raiz do endereço ou pasta pública acessível pelo browser. Claro que o realpath me vai dar algo como /home/<username>/<public>/uploads, mas em vez de guardar esse caminho, se guardar apenas o nome da imagem, posso pegar no URL do site a acrescentar o que preciso, o Yii tem formas de te dar o endereço do site, como usar a propriedade Yii::app()->baseUrl. Resumindo, Yii::app()->baseUrl . "/uploads" . <nome da imagem> dá-te um URL que podes usar no browser para aceder à imagem. É isto ou percebi mal a pergunta? 1 Report
I-NOZex Posted September 21, 2013 at 09:47 AM Author Report #525411 Posted September 21, 2013 at 09:47 AM (edited) @Knitter, o problema é um pouco mais complexo que isso... a backend é um subdominio, que aponta para a pasta: backend > www o basePath vai darme o path da pasta backend, o baseUrl vai darme o endereço (www.admin.site.com), ao fazer Yii::app()->baseUrl . "/uploads", ele vai procurar pela pasta uploads dentro da pasta www... @Devexz, nao existe nenhuma pasta predefinida para uploads, apenas uma pasta common que tem as classes e assim. E eu queria uma pasta como a common para as imagens, dando para aceder na frontend como na backend... O codigo de upload acho irrelevante, mas deixo aqui a mesma: $path = Yii::getPathOfAlias('webroot').'/../../uploads'; $url = 'http://imdb-poster.b0.upaiyun.com/000/065/126.jpg!cover?_upt=eb81c7301379481672'; $data = Yii::app()->curl->setOptions(array( CURLOPT_URL => $url, CURLOPT_RETURNTRANSFER => 1, CURLOPT_TIMEOUT => 30, ))->get($url); $parse = parse_url($url); $ext = pathinfo(basename($parse['path']), PATHINFO_EXTENSION); $ext = explode('!', $ext,2); $filename = time() . "." . $ext[0]; file_put_contents($path.$filename, $data); //return $filename; eu ja pensei em varias soluçoes, a unica que por agora consigo ver é tornar essa pasta de uploads num subdominio... vi falar em symlinks entre a pasta na backend e na frontend mas nem entendi bem o uso da função entretanto fico a espera do @brunoais, como disse ter uma solução... Edited September 21, 2013 at 10:43 AM by I-NOZex B2R » Beat2Revolution v3.0b | Regista e divulga-nos beat2revolution.net
I-NOZex Posted September 21, 2013 at 11:22 AM Author Report #525415 Posted September 21, 2013 at 11:22 AM aqui está uma potencial solução: $aliasPath = realpath(Yii::getPathOfAlias('application').'/../uploads/img/'); //obtem o caminho da pasta de uploads $imageUrl = Yii::app()->getAssetManager()->publish($aliasPath); //publica as imagens da pasta como sendo asset CHtml::Image($imageUrl.'/1379601488.jpg','Client',array('width'=>'240')); //helper que renderiza a imagem B2R » Beat2Revolution v3.0b | Regista e divulga-nos beat2revolution.net
Knitter Posted September 21, 2013 at 01:32 PM Report #525426 Posted September 21, 2013 at 01:32 PM Existem várias alternativas, o problema não tem nada de complexo, a única coisa que é preciso é que cada componente saiba o URL a criar, e dado que és tu que o estás a fazer então podes até colocar o URL como uma opção de configuração (por exemplo usando o array params). A opção que colocaste é uma forma, symlinks seria a minha opção se o host for GNU Linux (os symlinks não funcionam em MS Windows), ou então simplesmente ter o URL configurado, nem que o cries dinamicamente. 1 Report
I-NOZex Posted September 21, 2013 at 03:21 PM Author Report #525435 Posted September 21, 2013 at 03:21 PM e qual será a opção mais correcta? essa dos assets funciona, mas vai tar a publicar todas as imagens desnecessariamente, temo que isso possa comprometer um pouco a performance se forem muitas imagens... B2R » Beat2Revolution v3.0b | Regista e divulga-nos beat2revolution.net
Knitter Posted September 21, 2013 at 03:28 PM Report #525437 Posted September 21, 2013 at 03:28 PM Pessoalmente prefiro ser eu a controlar o URL através de opções de configuração, é mais simples quando quero mudar mas obriga a escrever mais código. Usar o sistema de publicação de assets é mais simples a nível de código, e também é portável o suficiente. O mecanismo de publicação de assets faz uma validação simples para ver se já publicou o ficheiro ou a pasta e assim evitar copiar os mesmos ficheiros várias vezes, isso ajuda na performance. Atenção que esta validação é muito simples, usa hashes muito pequenas (com mais colisões) e, se não me engano, valida apenas o nome da pasta se tentares publicar uma pasta completa e não considera alterações ao conteúdo da pasta, os assets são considerados imutáveis com alterações apenas em ugrades.
I-NOZex Posted September 21, 2013 at 05:08 PM Author Report #525439 Posted September 21, 2013 at 05:08 PM uhm pois, apesar de resolver, nao achei que fosse totalmente viavel... e o problema começa um pouco antes disto tudo ate, pq a backend e a frontend funciona quase como 2 sites separados... a forma que vi de os separar num endereço, foi tornado a backend um subdominio e a frontend ser um dominio principal... mas depois gera aqui este problema... como é que tu resolverias? ja procurei alguns artigos do genero, mas nada que funcione mesmo... vejo muitos tutorias de como fazer upload de ficheiros do pc para o servidor, mas um upload remoto (que é apenas a copia de um servidor para outro) nao encontro nada... tou a baralhar-me cada vez mais xD se me puderes elucidar com um pouco de codigo... aquele que disseste la atras funcionaria, se a pasta tivesse dentro da backend... B2R » Beat2Revolution v3.0b | Regista e divulga-nos beat2revolution.net
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now