Antes de qualquer coisa precisamos habilitar o cgi no Apache para ler arquivos binários compilados em C++ .
Nós mostramos como fazer isso de forma detalhada no Curso de C++ Moderno Avançado, se você não adquiriu e não sabe, sugiro você ver esse artigo que apesar de ter feito para Shell Script, você pode seguir e alterar o .sh
por .cpp
.
Após isso basta criar o nosso código em C++ que irá ler o arquivo Markdown, da seguinte forma:
Vamos chamar ele de readfile.cpp
. No meu caso que estou no Gentoo, ele fica dentro do diretório /var/www/localhost/cgi-bin
. Dentro desse diretório, criei outro diretório de nome cpp
.
Lembrando que em alguns casos precisa de permissão de
root
, exemplo:sudo mkdir -p /var/www/localhost/cgi-bin/cpp
#include <iostream>
#include <fstream>
template<typename T>
class ReadFile {
public:
ReadFile(){
std::cout << "Content-Type: plain/text\n\n";
}
const std::string readfile( const T * myfile ){
std::string lines, content;
std::ifstream file( *myfile );
if ( file.is_open() ) {
while( getline( file, lines ) ){
content += lines + "\n";
}
file.close();
}else{
return "Falha ao ler arquivo.";
}
return content;
}
};
int main( int argc , char ** argv ){
const std::string myfile = "/var/www/localhost/htdocs/file.md";
ReadFile<std::string> r;
std::cout << r.readfile( &myfile ) << '\n';
return 0;
}
Perceba que o nome do arquivo que iremos ler é file.md
(estou usando esse exemplo de arquivo markdown ), mas você pode fazer isso dinamicamente, esse é só um exemplo.
Agora é só compilar, exemplo: g++ readfile.cpp -o readfile
. Pronto, agora temos um arquivo binário com mime-type plain/text de nome readfile
somente.
Próximo passo é fazermos o download do Marked que é um parser em JavaScript que irá converter nosso Markdown em HTML:
wget https://cdn.jsdelivr.net/npm/marked/marked.min.js -O marked.js
Você pode fazer a requisição via GET ou POST de outras maneiras: com fetch, axios, … ou até mesmo com JavaScript puro! Mas nesse caso vamos usar jQuery por se tratar de uma lib de fácil manuseio e por conta da sua alta disponibilidade na internet. E também vamos baixar o jQuery:
wget https://terminalroot.com.br/assets/js/jquery-3.4.1.slim.min.js -O jquery.js
Note: que eu baixei a versão 3.4.1 que é a justamente a que eu uso no site Terminal Root.
Dentro do diretório que criei e escolhi baixar e salvar os arquivos, já há:
marked.js
jquery.js
file.md
Agora basta criarmos um arquivo no seu servidor Apache, exemplo index.html
com o seguinte conteúdo:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Lendo arquivo Markdown com C++</title>
<script src="jquery.js"></script>
<script>
$(function(){
$.post("http://localhost/cgi-bin/cpp/readfile", function(mostrar){
document.getElementById('app').innerHTML = marked( mostrar );
});
});
</script>
</head>
<body>
<div id="app" class="ui text container"></div>
<script src="marked.js"></script>
</body>
</html>
Note que o endereço do meu
readfile
está em: http://localhost/cgi-bin/cpp/readfile (no meu computador).
Pronto, agora é só acessar meu index.html
que está na raiz do meu servidor e o file.md
será exibido:
clique na imagem para ver em alta resolução
Lembrando que adicionei um CSS para ficar mais legal! 😃
Fácil, né?
A lista é grande porque a maioria dos aplicativos de sucesso usam C++.
Por hoje é só!
Então se inscreva nos nossos Cursos de C++ Moderno . Você aprender criar:
Acesse o endereço:
cpp cppdaily javascript markdown html apache css