Skip to content

Commit 8f3e720

Browse files
author
Flavius12
committed
Create phartools.php
1 parent c8c4a7e commit 8f3e720

1 file changed

Lines changed: 235 additions & 0 deletions

File tree

phartools.php

Lines changed: 235 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,235 @@
1+
<?php
2+
3+
/*
4+
* PharTools (v1.0) by EvolSoft
5+
* Developer: EvolSoft (Flavius12)
6+
* Website: http://www.evolsoft.tk
7+
* Date: 23/04/2015 07:55 PM (UTC)
8+
* Copyright & License: (C) 2015 EvolSoft
9+
* Licensed under MIT (https://github.com/EvolSoft/PharTools/blob/master/LICENSE)
10+
*/
11+
12+
echo "EvolSoft PharTools v1.0\n";
13+
if(version_compare(phpversion(), "5.3.0", "<")){
14+
echo "ERROR: PharTools requires PHP version >= 5.3.0\n";
15+
exit(1);
16+
}
17+
if(!Phar::canWrite()) echo "WARNING: Phar creation is disabled in php.ini config. Please enable it to create Phar archives\n";
18+
echo "\n";
19+
if(isset($argv[1])){
20+
if(strtolower($argv[1]) == "-c"){ //PharTools Create command
21+
if(Phar::canWrite()){
22+
if(isset($argv[2]) && isset($argv[3])){
23+
//Get fixed filename
24+
if(strtolower(substr($argv[3], -5)) == ".phar"){
25+
$file = $argv[3];
26+
}else{
27+
$file = $argv[3] . ".phar";
28+
}
29+
$params = array_slice($argv, 4);
30+
$stub = null;
31+
$regex = null;
32+
$metadata = null;
33+
$compression = null;
34+
for($i = 0; $i < count($params) - 1; $i++){
35+
//Check Compression
36+
if($params[$i] == "-c" && substr($params[$i + 1], 1) != "-"){
37+
if(strtolower($params[$i + 1]) == "gzip" || strtolower($params[$i + 1]) == "gz"){
38+
$compression = Phar::GZ;
39+
}elseif(strtolower($params[$i + 1]) == "bzip2" || strtolower($params[$i + 1]) == "bz2"){
40+
$compression = Phar::BZ2;
41+
}else{
42+
$compression = null;
43+
}
44+
}
45+
//Check Metadata
46+
if($params[$i] == "-m" && substr($params[$i + 1], 1) != "-"){
47+
$metadata = stringToMetadata($params[$i + 1]);
48+
}
49+
//Check Stub
50+
if($params[$i] == "-s" && substr($params[$i + 1], 1) != "-"){
51+
$stub = $params[$i + 1];
52+
}
53+
//Check Regex
54+
if($params[$i] == "-r" && substr($params[$i + 1], 1) != "-"){
55+
$regex = $params[$i + 1];
56+
}
57+
}
58+
if(file_exists($argv[2])){
59+
if(file_exists($file)){
60+
@unlink($file);
61+
echo "Overwritting phar...";
62+
}else{
63+
echo "Creating phar...";
64+
}
65+
$phar = new Phar(getcwd() . "/" . $file, 0, $file);
66+
//Check compression
67+
if($compression != null){
68+
if($compression == Phar::GZ){
69+
if($phar->canCompress(Phar::GZ)){
70+
$phar->compress($compression);
71+
echo "\nCompression set to GZIP";
72+
}else{
73+
echo "\nCan't use GZIP compression";
74+
}
75+
}elseif($compression == Phar::BZ2){
76+
if($phar->canCompress(Phar::BZ2)){
77+
$phar->compress($compression);
78+
echo "\nCompression set to BZIP2";
79+
}else{
80+
echo "\nCan't use BZIP2 compression";
81+
}
82+
}
83+
}
84+
//Check metadata
85+
if($metadata != null){
86+
$phar->setMetadata($metadata);
87+
}
88+
//Check stub
89+
if($stub != null){
90+
$phar->setStub($stub);
91+
}
92+
//Create Phar
93+
if(is_dir($argv[2])){
94+
//Check regex
95+
if($regex != null){
96+
$phar->buildFromDirectory(getcwd() . "/" . $argv[2], $regex);
97+
}else{
98+
$phar->buildFromDirectory(getcwd() . "/" . $argv[2]);
99+
}
100+
echo "\nPhar file created in " . getcwd() . "!";
101+
}else{
102+
if(file_exists($argv[2])){
103+
$phar->addFile($argv[2]);
104+
echo "\nPhar file created in " . getcwd() . "!";
105+
}else{
106+
echo "\nSource not found error";
107+
}
108+
}
109+
}else{
110+
echo "\nSource not found error";
111+
}
112+
}else{
113+
echo "Usage: -c <source_path|source_file> <destination_phar> [options]\n";
114+
echo "\nOptions:\n\n";
115+
echo "-c gzip|bzip2 Compress the phar file using gzip or bzip2 compression\n";
116+
echo "-m <metadata> Add metadata to the phar file (metadata format must be like 'key=>value,key2=>value2'\n";
117+
echo "-s <stub> Set stub string for the phar\n";
118+
echo "-r <regex> Include only files matching the regular expression";
119+
}
120+
}else{
121+
echo "Phar creation is disabled in php.ini config. Please enable it to create Phar archives\n";
122+
}
123+
}elseif(strtolower($argv[1]) == "-e"){ //PharTools Extract command
124+
if(isset($argv[2])){
125+
//Get fixed filename
126+
if(strtolower(substr($argv[2], -5)) == ".phar" || strpos($argv[2],'.') !== false){
127+
$file = $argv[2];
128+
}else{
129+
$file = $argv[2] . ".phar";
130+
}
131+
if(file_exists($file)){
132+
try{
133+
$phar = new Phar($file, 0);
134+
if(isset($argv[3])){
135+
if(is_dir($argv[3])){
136+
echo "Extracting...";
137+
$phar->extractTo($argv[3], null, true);
138+
echo "\nExtracted in " . $argv[3] . "!";
139+
}else{
140+
$dir = @mkdir($argv[3]);
141+
//Check directory
142+
if($dir){
143+
echo "Extracting...";
144+
$phar->extractTo($argv[3], null, true);
145+
echo "\nExtracted in " . $argv[3] . "!";
146+
}else{
147+
echo "I/O Error";
148+
}
149+
}
150+
}else{
151+
echo "Extracting...";
152+
$phar->extractTo(getcwd(), null, true);
153+
echo "\nExtracted in " . getcwd() . "!";
154+
}
155+
}catch(Exception $e){
156+
echo "Invalid phar file";
157+
}
158+
}else{
159+
echo "File not found";
160+
}
161+
}else{
162+
echo "Usage: -e <phar_file> [extract_directory]";
163+
}
164+
}elseif(strtolower($argv[1]) == "-i"){ //PharTools Info command
165+
if(isset($argv[2])){
166+
//Get fixed filename
167+
if(strtolower(substr($argv[2], -5)) == ".phar" || strpos($argv[2],'.') !== false){
168+
$file = $argv[2];
169+
}else{
170+
$file = $argv[2] . ".phar";
171+
}
172+
if(file_exists($file)){
173+
try{
174+
$phar = new Phar($file, 0);
175+
if($phar->hasMetadata()){
176+
$metadata = metadataToString($phar->getMetadata());
177+
}else{
178+
$metadata = "No metadata found\n";
179+
}
180+
echo "Size: " . intval((filesize($file) * .0009765625) * .0009765625) ." MB (" . intval(filesize($file) * .0009765625) . " KB)\n";
181+
echo "Signature: " . $phar->getSignature()["hash"] . "\n";
182+
echo "Signature type: " . $phar->getSignature()["hash_type"] . "\n";
183+
echo "Stub: " . $phar->getStub();
184+
echo "Writable: " . strbool($phar->isWritable()) . "\n";
185+
echo "Readable: " . strbool($phar->isReadable()) . "\n";
186+
echo "Metadata: " . $metadata;
187+
}catch(Exception $e){
188+
echo "Invalid phar file";
189+
}
190+
}else{
191+
echo "File not found";
192+
}
193+
}else{
194+
echo "Usage: -i <phar>";
195+
}
196+
}elseif(strtolower($argv[1]) == "-v"){ //PharTools Version command
197+
echo "EvolSoft website: http://www.evolsoft.tk\n";
198+
echo "PharTools website: http://phartools.evolsoft.tk\n";
199+
echo "GitHub: https://github.com/EvolSoft/PharTools\n";
200+
}else{
201+
printDefault();
202+
}
203+
}else{
204+
printDefault();
205+
}
206+
207+
function printDefault(){
208+
echo "Usage:\n";
209+
echo "-c <source_path|source_file> <destination_phar> [options] Creates a phar file\n";
210+
echo "-e <phar_file> [extract_path] Extracts a phar file\n";
211+
echo "-i <phar_file> Shows info about a phar file\n";
212+
echo "-v Get PharTools version\n";
213+
}
214+
215+
function strbool($bool){
216+
return ($bool) ? 'true' : 'false';
217+
}
218+
219+
function metadataToString(array $metadata){
220+
$data = "\n";
221+
foreach($metadata as $k => $m){
222+
$data .= " " . $k . ": " . $m . "\n";
223+
}
224+
return $data;
225+
}
226+
227+
function stringToMetadata($string){
228+
$string = explode(",", $string);
229+
foreach($string as $v){
230+
$tmp = explode("=>", $v);
231+
$data[$tmp[0]] = $tmp[1];
232+
}
233+
return $data;
234+
}
235+
?>

0 commit comments

Comments
 (0)