MiPhant 3.0.0

Publicado em: 15/08/2025

O MiPhant é desenvolvido para rodar os scripts PHP através de um navegador de Internet com janelas personalizadas, ele executa o servidor PHP embutido com portas aleatórias. Dessa forma, você pode executar vários aplicativos ao mesmo tempo sem que eles interfiram uns nos outros.

Além disso, o MiPhant já possui uma versão mais recente do PHP disponível junto com o software e compilado de forma estática (não depende de bibliotecas externas), graças ao excelente projeto static-php-cli.

Idiomas
No MiPhant você pode desenvolver aplicativos em vários idiomas, você só precisa criar um arquivo de idioma no formato json na pasta langs e adicionar as traduções. Ao executar o aplicativo em um computador com um idioma diferente, o MiPhant detectará o idioma e obterá a tradução por meio do arquivo de tradução.

Download para Debian/Ubuntu

DEB

Download para Windows

Instalador ZIP

O instalador foi criado utilizando o excelente projeto de código aberto NSIS.

Aviso: Alguns antívirus podem apresentar falsos positivos para o instalador, nossos softwares são 100% livre de vírus e qualquer outra ameaça virtual.

Caso prefira pode usar a versão ZIP do MiPhant.

Resultado de Análise com VírusTotal: 

Instalação para Debian/Ubuntu: Baixe o arquivo deb, dê dois cliques no pacote deb e clique em Instalar
Instalação para Windows versão Instalador: Baixe o arquivo exe, clique duas vezes, siga o passo a passo e aguarde a instalação
Instalação para Windows versão ZIP: Baixe o arquivo zip e extraia na pasta C:\, após a extração deve ficar assim: c:\miphant\

Para Linux Debian/Ubuntu e Instalador para Windows o MiPhant removerá versões anteriores automaticamente na instalação, já para a versão ZIP para Windows é necessário excluir a pasta miphant no c:\ se existir e extrair os novos arquivos.

Documentação

Em caso de dúvidas, adquira um plano abaixo e obtenha suporte.

Idiomas: Inglês (Padrão) e Português

SHA256
Debian/Ubuntu: 45dfa4ab61997907da79b909bd95004a89733d6e11cb3637ffa0efd7a95d1af4
Windows: 69013e603d972b5003208105b266cde43d7c8f92a0723b8683e110e0d070c6ac

Funções do MiPhant Gratuito

  • Função para obter versão do MiPhant e recursos internos
  • Suporte para trabalhar com rotas em PHP
  • Suporte para o banco de dados SQLite3
  • Suporte para criação de Menu e Submenu
  • Função para caixas de diálogo para mensagem e confirmação
  • Função para nova janela dentro do aplicativo
  • Função para Tradução em JS
  • DevTools
  • Função para fechar todo o aplicativo de uma vez
  • Environments: ARGV, Nome de usuário, HomeDir, Plataforma e Idioma

Funções do MiPhant Premium

Os desenvolvedores de scripts PHP para desktop podem desbloquear mais recursos para seus sistemas utilizando o MiPhant Premium.

  • Todos os recursos da versão gratuita
  • Função para caixas de diálogo para abrir e salvar arquivo e selecionar diretório
  • Função para abrir URL em um navegador externo
  • Função para exibir notificação (compatível apenas com Linux)
  • Função para adicionar Ícone na bandeja do sistema
  • Função para Exportar para PDF
  • Suporte Técnico

 Assinar Plano

Formas de Pagamento: Cartão de Crédito, Boleto Bancário ou PIX

MiPhant Suporte

Para usuários e desenvolvedores que precisam apenas de suporte técnico, sem recursos extras.

Assinar Plano

Formas de Pagamento: Cartão de Crédito, Boleto Bancário ou PIX

Informações do Software

  • Versão: 3.0.0
  • Licença: Freemium
  • EULA

Requisitos do Sistema:

  • Sistema Operacional de 64 bits:
    • Linux Debian 12 ou superior
    • Linux Ubuntu 24.04 ou superior
    • Windows 10 ou superior
  • Visual C++ Redistributable 14.42 (Windows)

Perguntas Frequentes

Para que serve o MiPhant?

O MiPhant é um software desenvolvido para navegar em sistemas PHP no desktop, dessa forma você pode desenvolver desde projetos pessoais até empresariais em PHP, permitindo que os usuários possam usar seu software no Windows e Linux com facilidade.

Quais extensões disponíveis atualmente na versão do PHP que está no MiPhant?

     
soap Comunicação com serviços web via SOAP PHP License
bcmath Cálculos matemáticos de precisão arbitrária PHP License
calendar Manipulação de datas e calendários PHP License
opcache Acelera execução do PHP com cache de bytecode PHP License
filter Filtragem e validação de dados (e.g. e-mails, inteiros, URLs) PHP License
mbstring Suporte a strings multibyte (UTF-8, etc.) PHP License
intl Internacionalização (datas, números, mensagens) PHP License + ICU License
gd Manipulação e criação de imagens PHP License + libgd License
sockets Comunicação de baixo nível via sockets PHP License
bz2 Compactação/descompactação BZIP2 PHP License + libbz2 License
zlib Compressão/descompressão de dados (gzip) PHP License + zlib License
curl Transferência de dados (HTTP, FTP, etc.) PHP License + libcurl License
openssl Criptografia e SSL/TLS PHP License + OpenSSL License
pdo Abstração de acesso a bancos de dados PHP License
pdo_sqlite PDO para SQLite PHP License + SQLite License
sqlite3 Interface direta com SQLite PHP License + SQLite License
zip Criação e leitura de arquivos ZIP PHP License + libzip License
session Gerenciamento de sessões PHP License
phar Criação de pacotes PHAR PHP License

Posso desenvolver software proprietário e livres?

Você pode desenvolver softwares proprietários de código fechado ou de código fonte disponível (source-available).

No caso do Software Livre você pode desenvolver desde que não utilize recursos do MiPhant no seu script e utilize o MiPhant apenas para navegar no seu sistema.

Posso ofuscar o código do meu software?

Sim. Softwares proprietários podem ter seu código ofuscado, para isso você pode trabalhar com ofuscadores, recomendo o yakpro para ofuscação do PHP e JavaScript Obfuscator para ofuscação de códigos JavaScript. Você também pode utilizar softwares pagos para isso ou usar técnicas mais simples como usar o base64, mas lembre-se, quanto mais simples a técnica de ofuscação for, mais fácil será desofuscá-lo.

Posso vender chaves de licenças para meu software?

Se o seu software for proprietário você pode vender sua licença como desejar, sob licenças, limitação de uso de computadores e usuários, licença vitalícia, entre outras formas. Você só precisa desenvolver essa solução em seu código PHP.

Posso desativar o PHP e vincular o endereço do meu site?

Não. No momento desativei esse recurso para evitar uso externos, você pode vincular usando o PHP, mas não recomendo isso, por questão de segurança.

Posso usar bibliotecas sob a licença GPL no meu software?

Caso não utilize códigos do MiPhant no seu projeto e use o MiPhant apenas para navegação não terá problemas de incompatibilidade de licença, pois nesse caso seria como se estivesse abrindo em um navegador apenas para navegar no seu sistema.

Quero um recurso mais avançado para gerar PDF em PHP, qual utilizar?

Recomendo utilizar o próprio código de geração de PDF que acompanha o MiPhant, mas caso precise usar uma biblioteca em PHP, recomendo a biblioteca DomPDF que até o dia 11/10/2025 está sob a licença LGPL, uma licença menor e compatível com softwares proprietários. Recomendo também ler mais sobre a licença LGPL para obter informações de como você pode trabalhar com códigos sob essa licença.

Como distribuir meu software?

Para distribuir seu software você pode:

  • Compactar seu projeto em zip ou tar.gz
    • Crie um atalho ou um aplicativo para acionar o MiPhant
  • Criar um instalador com NSIS
    • Permite a criação de instaladores no Windows e Linux via Wine
  • Criar um pacote DEB

Coloque sempre uma licença no seu software, caso não saiba criar uma licença para seu software recomendo sempre consultar um advogado.

Posso usar em um ambiente local?

Sim. O software é desenvolvido para funcionar com o servidor embutido do PHP em um ambiente local utilizando o IP 127.0.0.1, as portas são geradas automaticamente e de forma aleatória. Por esse motivo, nenhum computador externo terá acesso ao servidor, exceto se você configurar para que o IP local seja ouvido pela rede, o que não recomendo, pois o IP local deve ser utilizado apenas para uso do usuário local, sem acesso a rede.

Posso usar em um computador público?

Evite utilizar o MiPhant em computadores públicos, pois ele utiliza o servidor embutido do PHP, exceto se realizar algum tratamento e aplicar técnicas de segurança, ao utilizá-lo, restrinja-se a servidores locais e configure o firewall para limitar o acesso apenas a endereços confiáveis.

Outras Informações

O MiPhant é fornecido "COMO ESTÁ", sem garantia de qualquer tipo, expressa ou implícita. O Desenvolvedor não oferece garantias quanto à precisão, confiabilidade, desempenho, precisão ou adequação do Software para um determinado fim.

Documentação

Primeiros Passos

Os aplicativos integrados com o MiPhant precisam ser criados na pasta app e também precisam ter o arquivo config.json e o arquivo en.json.

Estrutura

  • app/config/config.json
  • app/langs/en.json

Configuração

No arquivo de configuração é necessário ter:

{
	"app": {
		"id": "miphantexemplo",
		"name": "MiPhant Exemplo",
		"version": "3.0.0",
		"width": 800,
		"height": 600,
		"resizable": true,
		"frame": true,
		"icon": "miphantexemplo.png",
		"disableAccelerationHardware": true,
		"author": {
			"name": "",
			"email": "",
			"url": ""
		},
		"homepage": "",
		"license": "SEE LICENSE IN LICENSE.md",
		"copyright": "Copyright (C) 2025 Seu Nome. Todos os direitos reservados."
	},
	"server": {
		"router": false
	},
	"dev": {
		"menu": true,
		"tools": false
	}
}

Ícone da Janela

O ícone do aplicativo deve ser adicionado dentro da pasta app/icon/ com o nome que você definiu no arquivo config.json.

Caso não seja encontrado um ícone nessa pasta, será utilizado o ícone padrão do MiPhant.

Executar com o MiPhant

Para executar seu projeto no MiPhant é necessário criar um atalho ou programar a execução para acionar o MiPhant.

# Linux
/opt/miphant/miphant $(pwd)/seuprojeto/

# Windows
C:\miphant\miphant.exe C:\seuprojeto\

A pasta "app" deve ficar na mesma pasta de seu atalho, ao passar a localização do seu projeto, o MiPhant detectará automaticamente a pasta app.

Tradução

Para que o software funcione corretamente é necessário criar o arquivo en.json, o idioma inglês é definido como padrão no MiPhant. Mesmo que seu software não tenha tradução, é necessário que o arquivo en.json seja criado, você pode deixá-lo sem itens, mas lembre-se de abrir e fechar as chaves {} para que o arquivo json fique no formato correto.

{}

Para criar as traduções você precisa definir seu aplicativo no idioma inglês e depois criar os outros idiomas, por exemplo, en.json, pt.json, es.json.

Exemplo en.json

{
"File":"File",
"Edit":"Edit",
"Help":"Help"
}

Exemplo pt.json

{
"File":"Arquivo",
"Edit":"Editar",
"Help":"Ajuda"
}

Estrutura da Pasta

  • app/langs/en.json
  • app/langs/pt.json

Exemplo

<?php
$sDirLang = dirname(__FILE__,2) . '/langs/';

if (file_exists($sDirLang . $_ENV['MIPHANT_LANG'] . '.json')) {
    $sText = json_decode(file_get_contents($sDirLang . $_ENV['MIPHANT_LANG'] . '.json'), true);

    function translate($text, ...$values): string
    {
        global $sText;

        $value = empty($sText[$text]) ? $text : $sText[$text];
        $a = sprintf($value, ...$values);

        return $a;
    }

    echo '<h3>PHP</h3>';
    echo translate('Continue') . '<br>';
    echo translate('Unable to find file %s', 'example.txt');
}
?>
<h3>JavaScript</h3>
<div id="example"></div>
<script>
    document.getElementById('example').innerHTML = miphant.translate('Cancel') + '<br>';
    document.getElementById('example').innerHTML += miphant.translate('Unable to find file %s', 'example.js');
</script>

Menu

O software também pode ter menus e submenus, exemplo:

{
    "Menu1": {
        "SubMenu1": {
            "page": "index.php"
        },
        "separator1": {},
        "SubMenu2": {
            "page": "page2.php",
            "key": "CTRL+O"
        },
        "separator2": {},
        "SubMenu3": {
            "page": "page3.php",
            "key": "CTRL+K",
            "newwindow": true
        },
        "SubMenu4": {
            "page": "page4.php",
            "key": "CTRL+K",
            "newwindow": true,
            "width": 400,
            "height": 400,
            "resizable": false,
        },
        "separator3": {},
        "SubMenu5": {
            "script": "minhafuncao()"
        },
    },
    "Menu2":
    {
        "Submenu de URL": {
            "url": "https://www.seudominioaqui.com.br",
            "key": "F1"
        }
    }
}

Você pode criar o arquivo menu.json na pasta /app/menus/ para criar menus para sua janela principal, assim que o aplicativo for iniciado, um menu será carregado na janela.

Caso você queira ter menus para as outras janelas, é só criar a mesma estrutura de pastas na pasta /app/menus/ e criar os menus extras com o mesmo nome de sua pagina.

Estrutura da Pasta

  • Janela Principal
    • app/index.php
    • app/menus/menu.json
  • Janela de Exemplo sem Pasta
    • app/exemplo.php
    • app/menus/exemplo.json
  • Janela de Exemplo com pasta
    • app/clientes/list.php
    • app/menus/clientes/list.json

Environment

Através das variáveis de ambiente você pode fazer com que o script PHP obtenha algumas informações que são criadas no MiPhant.

  • MIPHANT_LANG: Obtém o idioma principal do sistema (pt, en, es)
  • MIPHANT_ARGV: Obtém os argumentos
  • MIPHANT_USERNAME: Obtém o nome de usuário
  • MIPHANT_HOMEDIR: Obtém a pasta home do usuário (/home/nomedousuario/ ou C:\Users\nomedousuario)
  • MIPHANT_PLATFORM: Obtém a plataforma do sistema (linux ou win32)

Exemplo de Variáveis de Ambiente

<strong>Username</strong><br>
<?php echo $_ENV['MIPHANT_USERNAME']; ?><br><br>

<strong>User Path</strong><br>
<?php echo $_ENV['MIPHANT_HOMEDIR']; ?><br><br>

<strong>Platform</strong><br>
<?php echo $_ENV['MIPHANT_PLATFORM']; ?><br><br>

<strong>Language</strong><br>
<?php echo $_ENV['MIPHANT_LANG']; ?>

Exemplo de Argumentos

<p>To get the arguments run the terminal or cmd, go to your folder and type:</p>
<ul>
     <li>Linux: /opt/miphant/miphant $(pwd)/seuprojeto/ test1 test2 test3</li>
     <li>Windows: C:\miphant\miphant.exe C:\seuprojeto\ test1 test2 test3</li>
</ul>
<?php
if (empty($_ENV['MIPHANT_ARGV'])) {
    echo 'No argument has been found!';
} else {
     echo $_ENV['MIPHANT_ARGV'];
}
?>

Cabeçalho de Política de Segurança

<?php
header("Content-Security-Policy: default-src 'self'; script-src 'self' 'unsafe-inline'");

Cookies

 

<?php
if (empty($_COOKIE['info'])) {
    $count = 1;
    setcookie('info[msg]', $count, 0, '/', $_SERVER['SERVER_NAME'], false, true);
} else {
    $count = $_COOKIE['info']['msg'] + 1;
    setcookie('info[msg]', $count, 0, '/', $_SERVER['SERVER_NAME'], false, true);
}

echo 'Cookie: ' . $count;
echo '<p><a href="javascript:window.location.reload();">Update Page</a></p>';
  

Formulário GET

<?php
if ($_SERVER['REQUEST_METHOD'] == 'GET') {
    if (!empty($_GET['txtName'])) {
        $txtName = filter_input(INPUT_GET, 'txtName');

        echo 'My name is ' . $txtName . '<hr>';
    }
}
?>
<form name="frmPost" method="get" action="formget.php">
    <div>
        <label for="txtName">Type your name</label>
        <input id="txtName" name="txtName" type="text" placeholder="Type your name" required>
    </div>
    <button type="submit">Send</button>
</form>

Formulário POST

<?php
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    if (!empty($_POST['txtName'])) {
        $txtName = filter_input(INPUT_POST, 'txtName');

        echo 'My name is ' . $txtName . '<hr>';
    }
}
?>
<form name="frmPost" method="post" action="formpost.php">
    <div>
        <label for="txtName">Type your name</label>
        <input id="txtName" name="txtName" type="text" placeholder="Type your name" required>
    </div>
    <button type="submit">Send</button>
</form>

Versões do MiPhant e recursos internos (JavaScript)

const txtVersion = document.getElementById('version');
txtVersion.innerHTML = `Version of MiPhant: ${miphant.version('miphant')}<br>`;
txtVersion.innerHTML += `Version of ElectronJS: ${miphant.version('electron')}<br>`;
txtVersion.innerHTML += `Version of NodeJS: ${miphant.version('node')}<br>`;
txtVersion.innerHTML += `Version of Chromium: ${miphant.version('chromium')}<br>`;

Ícone na Bandeja do Sistema

tray();
async function tray() {
    miphant.tray(lk, 'MiPhant', 'MiPhant', '', JSON.stringify({
        "Page Message": {
            page: "/message.php",
            newwindow: true
        },
        "Message": {
            script: "miphant.alert('MiPhant', 'This is an example message!', 'info', 'Continue');"
        },
        "Close": {
            script: 'miphant.close();'
        }
    }));
}

Mensagem de Alerta

Não utilize o window.alert ou confirm pois pode perder o foco da janela, por esse motivo desenvolvi o Alert e Confirm do MiPhant, além disso eles possuem mais recursos que o alert e confirm padrão.

<button type="button" onclick="message()">Display message</button>
<button type="button" onclick="confirm()">Confirm message</button>
<div id="info"></div>
<script>
    async function message() {
        miphant.alert('Information message', 'This is an example of a message!', 'info', 'Continue');
    }

    async function confirm() {
        miphant.confirm('Confirmation message', 'This is an example of a message!', 'error', 'Continue', 'Cancel', 'Button1', 'Button2').then((result) => {
            if (result == 1) {
                document.getElementById('info').innerHTML = 'Not confirmed';
            } else if (result == 2) {
                document.getElementById('info').innerHTML = 'Button 1';
            } else if (result == 3) {
                document.getElementById('info').innerHTML = 'Button 2';
            } else {
                document.getElementById('info').innerHTML = 'Confirmed';
            }
        });
    }
</script>

Notificação do Sistema

Esse recurso por enquanto é compatível apenas com Linux.

<button type="button" onclick="notification()">Notification</button>
<script>
    async function notification() {
        miphant.notification(lk, 'Information message', 'This is an example of a message!');
    }
</script>

Abrir Arquivo

<?php
if (!empty($_GET['filename'])) {
    $filename = filter_input(INPUT_GET, 'filename');

    echo '<textarea>' . file_get_contents($filename) . '</textarea>';
    exit;
}
?>
<script>
    async function open() {
        let sOpen = await miphant.openFile(lk);
        window.location.assign(`?filename=${sOpen.toString()}`);
    }
    open();
</script>

Salvar Arquivo

<?php
if (!empty($_GET['filename'])) {
    $filename = filter_input(INPUT_GET, 'filename');

    file_put_contents($filename, rand(10000, 99999));
    echo 'File ' . basename($filename) . ' saved successfully!';
    exit;
}
?>
<script>
    async function save() {
        let sSave = await miphant.saveFile(lk);
        window.location.assign(`?filename=${sSave.toString()}`);
    }
    save();
</script>

Selecionar Diretório

<?php
if (!empty($_GET['directory'])) {
    $selectDirectory = filter_input(INPUT_GET, 'directory');

    echo $selectDirectory;
    exit;
}
?>
<script>
    async function open() {
        let sSelect = await miphant.selectDirectory(lk);
        window.location.assign(`?directory=${sSelect.toString()}`);
    }
    open();
</script>

Gerar PDF

<?php
if (!file_exists(dirname(__FILE__) . '/pdf/')) {
    mkdir(dirname(__FILE__) . '/pdf/', 0777, true);
}
?>
<button id="pdf" type="button" class="no-print">Export PDF</button>
<div class="display-none print">
    <h3>Example PDF</h3>
    <table>
        <tr>
            <td><strong>Date/Time:</strong></td>
            <td><?php echo date('Y-m-d H:i:s'); ?></td>
        </tr>
    </table>
</div>
<p class="no-print">Print div</p>
<script>
    const pdf = document.getElementById('pdf');

    pdf.addEventListener('click', async () => {
        <?php if ($_ENV['MIPHANT_PLATFORM'] == 'linux') { ?>
            await miphant.exportPDF(lk, '<?php echo dirname(__FILE__) . '/pdf/example.pdf'; ?>');
        <?php } else { ?>
            await miphant.exportPDF(lk, '<?php echo str_replace('\\', '\\\\', dirname(__FILE__)) . '\\\\pdf\\\\example.pdf'; ?>');
        <?php } ?>
        miphant.newWindow('/pdf/example.pdf');
    });
</script>

Informações do PHP

<?php
phpinfo();

Sessão

<?php
session_name('miphant');
session_start();

if (empty($_SESSION['info'])) {
    $count = 1;
    $_SESSION['info'] = $count;

    echo 'Session: ' . $count;
} else {
    $count = $_SESSION['info'] + 1;
    $_SESSION['info'] = $count;

    echo 'Session: ' . $count;
}

echo '<p><a href="javascript:window.location.reload();">Update Page</a></p>';

Trabalhando com SQLite3

<?php
if (empty($_COOKIE['info'])) {
    $count = 1;
    setcookie('info[msg]', $count, 0, '/', $_SERVER['SERVER_NAME'], false, true);
} else {
    $count = $_COOKIE['info']['msg'] + 1;
    setcookie('info[msg]', $count, 0, '/', $_SERVER['SERVER_NAME'], false, true);
}

$pathDados = dirname(__FILE__) . '/dados/';
if (!file_exists($pathDados)) {
    mkdir($pathDados);
}

// Creates the database and the table
$db1 = new SQLite3($pathDados . '/example.sqlite');
$db1->exec("CREATE TABLE IF NOT EXISTS mi_example (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    name TEXT NOT NULL
)");
$db1->close();

// Insert records
$db2 = new SQLite3($pathDados . '/example.sqlite', SQLITE3_OPEN_READWRITE);
if (empty($_COOKIE['info'])) {
    $db2->query("INSERT INTO mi_example (name) VALUES ('" . $count . "')");
} else {
    if ($stmt = $db2->prepare("INSERT INTO mi_example (name) VALUES (:name)")) {
        $stmt->bindParam(':name', $count);
        $stmt->execute();
        $stmt->close();
    }
}
$db2->close();

echo '<p><a href="javascript:window.location.reload();">Update Page</a></p>';

// Check records
$db3 = new SQLite3($pathDados . '/example.sqlite', SQLITE3_OPEN_READONLY);
$query = $db3->query('SELECT * FROM mi_example ORDER BY id DESC');
while ($row = $query->fetchArray(SQLITE3_ASSOC)) {
    echo $row['name'] . '<br>';
}
$db3->close();

Fuso Horário

<?php
date_default_timezone_set("America/Sao_Paulo");
echo date('d/m/Y') . ' ' . date('H:i:s');

Tradução

<?php
$sDirLang = dirname(__FILE__,2) . '/langs/';

if (file_exists($sDirLang . $_ENV['MIPHANT_LANG'] . '.json')) {
    $sText = json_decode(file_get_contents($sDirLang . $_ENV['MIPHANT_LANG'] . '.json'), true);

    function translate($text, ...$values): string
    {
        global $sText;

        $value = empty($sText[$text]) ? $text : $sText[$text];
        $a = sprintf($value, ...$values);

        return $a;
    }

    echo '<h3>PHP</h3>';
    echo translate('Continue') . '<br>';
    echo translate('Unable to find file %s', 'example.txt');
}
?>
<h3>JavaScript</h3>
<div id="example"></div>
<script>
    document.getElementById('example').innerHTML = miphant.translate('Cancel') + '<br>';
    document.getElementById('example').innerHTML += miphant.translate('Unable to find file %s', 'example.js');
</script>