gremio10 14 Denunciar post Postado Outubro 4, 2011 Fala galera, eu to com um problemão, fui colocar meu site em Zend no ar, e quando tentei acessar pela URL, ele fica na raiz do site, ou seja, nas pastas da aplicação, ai entro no public/ e ele me retorna um erro : The requested URL /public/login/index was not found on this server. e meu arquivo .htaccess # Turn on rewrites. RewriteEngine on # Only apply to URLs on this domain RewriteCond %{HTTP_HOST} ^(www.)?meusite.com.br$ # Only apply to URLs that aren't already under folder. RewriteCond %{REQUEST_URI} !^/public/ # Don't apply to URLs that go to existing files or folders. RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d # Rewrite all those to insert /public. RewriteRule ^(.*)$ /public/$1 # Also redirect the root folder. RewriteCond %{HTTP_HOST} ^(www.)?meusite.com.br$ RewriteRule ^(/)?$ public/index.php [L] Obrigado pela ajuda. Compartilhar este post Link para o post Compartilhar em outros sites
Matias Rezende 50 Denunciar post Postado Outubro 5, 2011 Como está a estrutura de pastas no servidor? Qual a pasta onde está definido o DOCUMENT_ROOT? Normalmente os servidores colocam em uma pasta chamada public_html ou www ou ainda public. Se tiver alguma destas pastas, coloque tudo que está dentro da pasta public no seu projeto (index.php, .htaccess, estilos, imagens e javascript) dentro desta pasta e tente acessar a página inicial do projeto. Caso ele acesse e faça um redirecionamento (como parece ser o caso), tente fazer adicionar o index.php antes da URL (trocando www.meusite.com.br/login/index por www.meusite.com.br/index.php/login/index). Se funcionar com o index.php, o problema está no mod_rewrite. Carlos Eduardo Compartilhar este post Link para o post Compartilhar em outros sites
gremio10 14 Denunciar post Postado Outubro 5, 2011 Olá Matias Rezende, bom, coloquei um index.php na raiz com o $_SERVER, e me retornou que no DOCUMENT_ROOT é /var/www dentro do www/ há application docs library public tests e nesse meu index.php eu coloquei um header( "Location: public/index.php" ); quando atualizei, ele foi, e a url ficou: meusite.com.br/public/index.php/login/index e retornou o erro: Fatal error: Uncaught exception 'Zend_Loader_PluginLoader_Exception' with message 'Plugin by name 'DocType' was not found in the registry; então fui na minha layout e tirei o <?php echo $this->DocType('XHTML1_STRICT')."\n";?> e foi, mas queria ver se tem como não aparecer o public, pois local ele funciona perfeitamente... Obrigado. Compartilhar este post Link para o post Compartilhar em outros sites
Matias Rezende 50 Denunciar post Postado Outubro 5, 2011 Certo... A estrutura tá errada... As pastas application, docs, library e tests devem ficam antes da pasta www. O conteúdo da pasta public deve ficar dentro da pasta www. Assim deve funcionar. Carlos Eduardo Compartilhar este post Link para o post Compartilhar em outros sites
gremio10 14 Denunciar post Postado Outubro 5, 2011 Vou testar isso Matias, mas como que ele vai encontrar os arquivos se ele acessa diretamente o www ? e o meu htaccess, será que irá funcionar ? Obrigado. Compartilhar este post Link para o post Compartilhar em outros sites
Matias Rezende 50 Denunciar post Postado Outubro 5, 2011 Seu .htaccess não vai funcionar... Modifique ele para o seguinte: RewriteEngine On RewriteCond %{REQUEST_FILENAME} -s [OR] RewriteCond %{REQUEST_FILENAME} -l [OR] RewriteCond %{REQUEST_FILENAME} -d RewriteRule ^.*$ - [NC,L] RewriteRule ^.*$ index.php [NC,L] Deixando este .htaccess dentro da pasta www. Se os arquivos vão ser localizados, vai depender do conteúdo do arquivo index.php. O PHP pode buscar arquivos fora do document_root, ou seja, voltando 1 pasta (ou mais se necessário). Tente desta forma. Se não funcionar, poste o conteúdo do arquivo index.php e, se possível, a URL utilizada para acessar o sistema. Carlos Eduardo Compartilhar este post Link para o post Compartilhar em outros sites
gremio10 14 Denunciar post Postado Outubro 5, 2011 public/.htacces RewriteEngine On RewriteCond %{REQUEST_FILENAME} -s [OR] RewriteCond %{REQUEST_FILENAME} -l [OR] RewriteCond %{REQUEST_FILENAME} -d RewriteRule ^.*$ - [NC,L] RewriteRule ^.*$ index.php [NC,L] public/index.php <?php // Define path to application directory defined('APPLICATION_PATH') || define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/../application')); // Define application environment defined('APPLICATION_ENV') || define('APPLICATION_ENV', (getenv('APPLICATION_ENV') ? getenv('APPLICATION_ENV') : 'production')); // Ensure library/ is on include_path set_include_path(implode(PATH_SEPARATOR, array( realpath(APPLICATION_PATH . '/../library'), get_include_path(), ))); function printr( $_params ) { echo "<pre>"; print_r( $_params ); echo "</pre>"; } /** Zend_Application */ require_once 'Zend/Application.php'; // Create application, bootstrap, and run $application = new Zend_Application( APPLICATION_ENV, APPLICATION_PATH . '/configs/application.ini' ); $application->bootstrap() ->run(); não modifiquei nada tanto no index quanto no htaccess... Obrigado. Compartilhar este post Link para o post Compartilhar em outros sites
Matias Rezende 50 Denunciar post Postado Outubro 5, 2011 E não funcionou? Com estes conteúdos, a estrutura deve ficar assim: /application /{todo o conteúdo da aplicação, como controllers, models e views} /library /www /imagens /estilos /script index.php .htaccess Estando os arquivos desta forma, você deve conseguir acessar o módulo default (caso tenha módulos), controller index e action index ao entrar na URL www.meusite.com.br. Se tiver outro problema, não é caso de estrutura de dados, e sim de alguma inconsistência na aplicação. Carlos Eduardo Compartilhar este post Link para o post Compartilhar em outros sites
gremio10 14 Denunciar post Postado Outubro 5, 2011 Matias, coloquei como você disse no último post, mas ai ele direciona para o /login, e ai ele da o The requested URL /login was not found on this server. /var /application /{todo o conteúdo da aplicação, como controllers, models e views} /library /www /imagens /estilos /script index.php .htaccess módulo default (caso tenha módulos) como descubro se tenho ? ApplicationController.php controller que inicia com todas as outras, a função isLogged() vai em todas as init() que precisam estar logado. <?php class ApplicationController extends Zend_Controller_Action { /** * Verificar se o usuário está logado */ protected function isLogged() { if( !Zend_Auth::getInstance()->hasIdentity() ) { $this->_redirect( "login" ); exit; } } /** * Verifica se a requisição é POST * * @return bool */ public function isPost() { return $this->_request->isPost(); } /** * Verifica se a requisição é GET * * @return bool */ public function isGet() { return $this->_request->isGet(); } /** * Retorna os valores vindos do POST * * @return array */ public function getPost() { return $this->_request->getPost(); } /** * Retorna os valores vindos do GET * * @return array */ public function getQuery() { return $this->_request->getQuery(); } /** * Desativa o layout */ public function disableLayout() { $this->_helper->layout->disableLayout(); } /** * Retorna para uma página da mesma controller * * @param string $_view */ public function redirector( $_view ) { $this->_helper->redirector( $_view ); } /** * Muda o layout da página * * @param string $_layout */ public function setLayout( $_layout ) { $this->_helper->_layout->setLayout( $_layout ); } } ?> Obrigado. Compartilhar este post Link para o post Compartilhar em outros sites
Matias Rezende 50 Denunciar post Postado Outubro 5, 2011 Então o problema está no mod_rewrite mesmo. Neste página que não encontra, adicione o index.php antes de /login, ficando www.meusite.com.br/index.php/login. Se aparecer a página normalmente como você espera, o problema é o mod_rewrite mesmo, que deve estar desabilitado no servidor (ou então não ser servidor Apache). Carlos Eduardo Compartilhar este post Link para o post Compartilhar em outros sites
gremio10 14 Denunciar post Postado Outubro 5, 2011 Dito e feito Matias, tinha um problema no .htacces.. agora me tira outra dúvida, ele deu erro no <?php echo $this->DocType('XHTML1_STRICT')."\n";?> por que ? Compartilhar este post Link para o post Compartilhar em outros sites
Matias Rezende 50 Denunciar post Postado Outubro 6, 2011 Não é DocType, é doctype. Troque por: <?php echo $this->doctype('XHTML1_STRICT')."\n";?> Deve funcionar. Pelo jeito você programou ele no Windows e está instalando em ambiente Linux. Sinto lhe dizer, mas é grande a possibilidade de você encontrar mais problemas, principalmente por conta disto (Windows é case insensitive, enquanto o Linux é case sensitive). Se tiver mais algum problema neste nível (plugin ou classe não encontrada), pode conferir que é problema de case. Carlos Eduardo Compartilhar este post Link para o post Compartilhar em outros sites
gremio10 14 Denunciar post Postado Outubro 6, 2011 Cara, muito obrigado pela sua paciência e ajuda... Funcionou tudo certinho.. Obrigado. Compartilhar este post Link para o post Compartilhar em outros sites
gremio10 14 Denunciar post Postado Outubro 6, 2011 Desculpe estar voltando com esse tópico, é que me deu um problema, e como é referente a esse assunto, acho melhor não abrir um novo tópico. Eu uso para upload de foto o Zend_File_Transfer_Adapter_Abstract, para a pasta upload/ que fica no public, mas agora ele não encontra o public mesmo dentro do www/ coloquei ele então fora, no /var/upload/ e nada.. o que pode ser ? Obrigado. Compartilhar este post Link para o post Compartilhar em outros sites
Matias Rezende 50 Denunciar post Postado Outubro 6, 2011 Como você tenta enviar para a pasta no código? Se os arquivos ali baixados serão necessários para exibição eles devem ficar dentro da pasta www. Carlos Eduardo Compartilhar este post Link para o post Compartilhar em outros sites
gremio10 14 Denunciar post Postado Outubro 6, 2011 /** * Determina para qual pasta vai o upload */ $_path = "upload/"; $_upload = new Zend_File_Transfer(); $_upload->setDestination( $_path ); $_upload->addValidator( "Extension", false, array( "jpg", "jpeg", "png", "case" => true ) ) //->addValidator( "FilesSize", false, array( "min" => "1bit", "max" => "2Mb" ) ) ->addValidator( "Count", false, 1 ) ->addValidator( "ExcludeExtension", false, array( "php", "exe", "asp", "case" => true ) ) //->addValidator( "ImageSize", false, array( "maxwidth" => 150, "maxheight" => 150 ) ) ; $_file = $_upload->getFileInfo(); /** * Pega a extensão do arquivo */ $_fileExtension = $this->getExtension( $_upload->getFileName( null, false ) ); /** * Retorna um novo nome para o arquivo */ $_prefix = $this->getRenameFile( $_fileExtension ); /** * Renomeia o arquivo e irá sobreescrever caso exista outro igual */ $_upload->addFilter( "Rename", array( "target" => $_path . $_prefix, "overwrite" => true ) ); if( $_upload->receive() ) { try { $image = Zend_WideImage_WideImage::loadFromFile( $_path . $_prefix ); /** * Nome para o arquivo * será salvo no banco de dados * terá seus prefixos: * small_, * medium_, * big_ */ $nameFile = date( "YmdHisu" ) . uniqid() . "." . $_fileExtension; /** * Insere no banco de dados o nome do arquivo * e também o id de qual profissional ele é */ $upload = new Application_Model_Upload(); $file_upload_id = $upload->insert( array( "name" => $nameFile ) ); $_field[ "file_upload_id" ] = $file_upload_id; $big_resized = $image->resize( 350, 350, "inside" ); $medium_resized = $image->resize( 163, 163, "inside" ); $small_resized = $image->resize( 44, 44, "fill" ); //$small_resized = $image->crop( '50%-100', '50%-125', 44, 44 ); $big_resized->saveToFile( $_path . "big_" . $nameFile ); $medium_resized->saveToFile( $_path . "medium_" . $nameFile ); $small_resized->saveToFile( $_path . "small_" . $nameFile ); setcookie( "perfilPhoto", $nameFile, time() + 3600 * 60 * 60 * 24, "/" ); unlink( $_path . $_prefix ); } catch( Zend_Db_Exception $e ) { print $e->getTraceAsString(); } } Faço assim... Obrigado Compartilhar este post Link para o post Compartilhar em outros sites
Matias Rezende 50 Denunciar post Postado Outubro 6, 2011 Certo. Crie a pasta upload dentro da pasta www. Depois disto, adicione o código abaixo para debugar: $_path = "upload/"; if(!is_dir($_path)) { echo "Ops... não achamos o diretório"; } elseif(!is_writable($_path)){ echo "Ops... o diretório foi encontrado, mas não temos permissão de escrita nele"; } else { echo "Hum.... achamos o diretório e temos permissão de escrita. O problema está em outro lugar."; } $_upload = new Zend_File_Transfer(); Veja qual das mensagens aparece. Carlos Eduardo Compartilhar este post Link para o post Compartilhar em outros sites
gremio10 14 Denunciar post Postado Outubro 6, 2011 Perfeito! era problema de permissão... Brigadão, abraços.. Compartilhar este post Link para o post Compartilhar em outros sites