mirror of
https://github.com/bdnugget/php-src.git
synced 2026-11-08 01:37:30 +00:00
Compare commits
1
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
8f377452f1 |
No files matched your search
@@ -1,2 +0,0 @@
|
||||
enchant
|
||||
Pierre-Alain Joye, Ilia Alshanetsky
|
||||
@@ -1,36 +0,0 @@
|
||||
dnl
|
||||
dnl $Id$
|
||||
dnl
|
||||
|
||||
PHP_ARG_WITH(enchant,for ENCHANT support,
|
||||
[ --with-enchant[=DIR] Include enchant support.
|
||||
GNU Aspell version 1.1.3 or higher required.])
|
||||
|
||||
if test "$PHP_ENCHANT" != "no"; then
|
||||
PHP_NEW_EXTENSION(enchant, enchant.c, $ext_shared)
|
||||
if test "$PHP_ENCHANT" != "yes"; then
|
||||
ENCHANT_SEARCH_DIRS=$PHP_ENCHANT
|
||||
else
|
||||
ENCHANT_SEARCH_DIRS="/usr/local /usr"
|
||||
fi
|
||||
for i in $ENCHANT_SEARCH_DIRS; do
|
||||
if test -f $i/include/enchant/enchant.h; then
|
||||
ENCHANT_DIR=$i
|
||||
ENCHANT_INCDIR=$i/include/enchant
|
||||
elif test -f $i/include/enchant.h; then
|
||||
ENCHANT_DIR=$i
|
||||
ENCHANT_INCDIR=$i/include
|
||||
fi
|
||||
done
|
||||
|
||||
if test -z "$ENCHANT_DIR"; then
|
||||
AC_MSG_ERROR(Cannot find enchant)
|
||||
fi
|
||||
|
||||
ENCHANT_LIBDIR=$ENCHANT_DIR/lib
|
||||
|
||||
AC_DEFINE(HAVE_ENCHANT,1,[ ])
|
||||
PHP_SUBST(ENCHANT_SHARED_LIBADD)
|
||||
PHP_ADD_LIBRARY_WITH_PATH(enchant, $ENCHANT_LIBDIR, ENCHANT_SHARED_LIBADD)
|
||||
PHP_ADD_INCLUDE($ENCHANT_INCDIR)
|
||||
fi
|
||||
@@ -1,13 +0,0 @@
|
||||
// $Id$
|
||||
// vim:ft=javascript
|
||||
|
||||
ARG_ENABLE("enchant", "Enchant Support", "no");
|
||||
|
||||
if (PHP_ENCHANT == "yes") {
|
||||
if (CHECK_HEADER_ADD_INCLUDE("enchant.h", "CFLAGS_ENCHANT", PHP_ENCHANT)) {
|
||||
EXTENSION("enchant", "enchant.c");
|
||||
AC_DEFINE('HAVE_ENCHANT', 1, 'Have Enchant support', false);
|
||||
} else {
|
||||
WARNING('Could not find enchant.h; skipping');
|
||||
}
|
||||
}
|
||||
@@ -1,25 +0,0 @@
|
||||
<?php
|
||||
$tag = 'en_US';
|
||||
$r = enchant_broker_init();
|
||||
$bprovides = enchant_broker_describe($r);
|
||||
echo "Current broker provides the following backend(s):\n";
|
||||
print_r($bprovides);
|
||||
|
||||
|
||||
if (enchant_broker_dict_exists($r,$tag)) {
|
||||
$d = enchant_broker_request_dict($r, $tag);
|
||||
$dprovides = enchant_dict_describe($d);
|
||||
echo "dictionary $tag provides:\n";
|
||||
$spellerrors = enchant_dict_check($d, "soong");
|
||||
print_r($dprovides);
|
||||
echo "found $spellerrors spell errors\n";
|
||||
if ($spellerrors) {
|
||||
$suggs = enchant_dict_suggest($d, "soong");
|
||||
echo "Suggestions for 'soong':";
|
||||
print_r($suggs);
|
||||
}
|
||||
enchant_broker_free_dict($d);
|
||||
} else {
|
||||
}
|
||||
enchant_broker_free($r);
|
||||
?>
|
||||
@@ -1,776 +0,0 @@
|
||||
/*
|
||||
+----------------------------------------------------------------------+
|
||||
| PHP Version 5 |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1997-2004 The PHP Group |
|
||||
+----------------------------------------------------------------------+
|
||||
| This source file is subject to version 3.0 of the PHP license, |
|
||||
| that is bundled with this package in the file LICENSE, and is |
|
||||
| available at through the world-wide-web at |
|
||||
| http://www.php.net/license/3_0.txt. |
|
||||
| If you did not receive a copy of the PHP license and are unable to |
|
||||
| obtain it through the world-wide-web, please send a note to |
|
||||
| license@php.net so we can mail you a copy immediately. |
|
||||
+----------------------------------------------------------------------+
|
||||
| Author: Pierre-Alain Joye <paj@pearfr.org> |
|
||||
| Ilia Alshanetsky <ilia@prohost.org> |
|
||||
+----------------------------------------------------------------------+
|
||||
|
||||
$Id$
|
||||
*/
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
#endif
|
||||
#include "enchant.h"
|
||||
#include "php.h"
|
||||
#include "php_ini.h"
|
||||
#include "ext/standard/info.h"
|
||||
#include "php_enchant.h"
|
||||
|
||||
|
||||
typedef EnchantBroker * EnchantBrokerPtr;
|
||||
typedef struct _broker_struct enchant_broker;
|
||||
typedef struct _dict_struct enchant_dict;
|
||||
|
||||
typedef enchant_broker * enchant_brokerPtr;
|
||||
typedef enchant_dict * enchant_dictPtr;
|
||||
|
||||
typedef struct _broker_struct {
|
||||
EnchantBroker *pbroker;
|
||||
enchant_dict **dict;
|
||||
unsigned int dictcnt;
|
||||
zval *rsrc_id;
|
||||
} _enchant_broker;
|
||||
|
||||
typedef struct _dict_struct {
|
||||
unsigned int id;
|
||||
EnchantDict *pdict;
|
||||
enchant_broker *pbroker;
|
||||
zval *rsrc_id;
|
||||
enchant_dict *next;
|
||||
enchant_dict *prev;
|
||||
} _enchant_dict;
|
||||
|
||||
|
||||
/* True global resources - no need for thread safety here */
|
||||
static int le_enchant_broker;
|
||||
static int le_enchant_dict;
|
||||
|
||||
/* If you declare any globals in php_enchant.h uncomment this:*/
|
||||
/*ZEND_DECLARE_MODULE_GLOBALS(enchant)*/
|
||||
|
||||
/* {{{ enchant_functions[]
|
||||
*
|
||||
* Every user visible function must have an entry in enchant_functions[].
|
||||
*/
|
||||
function_entry enchant_functions[] = {
|
||||
PHP_FE(enchant_broker_init, NULL)
|
||||
PHP_FE(enchant_broker_free, NULL)
|
||||
PHP_FE(enchant_broker_get_error, NULL)
|
||||
PHP_FE(enchant_broker_list_dicts, NULL)
|
||||
PHP_FE(enchant_broker_request_dict, NULL)
|
||||
PHP_FE(enchant_broker_request_pwl_dict, NULL)
|
||||
PHP_FE(enchant_broker_free_dict, NULL)
|
||||
PHP_FE(enchant_broker_dict_exists, NULL)
|
||||
PHP_FE(enchant_broker_set_ordering, NULL)
|
||||
PHP_FE(enchant_broker_describe, NULL)
|
||||
PHP_FE(enchant_dict_check, NULL)
|
||||
PHP_FE(enchant_dict_suggest, NULL)
|
||||
PHP_FE(enchant_dict_add_to_personal, NULL)
|
||||
PHP_FE(enchant_dict_add_to_session, NULL)
|
||||
PHP_FE(enchant_dict_is_in_session, NULL)
|
||||
PHP_FE(enchant_dict_store_replacement, NULL)
|
||||
PHP_FE(enchant_dict_get_error, NULL)
|
||||
PHP_FE(enchant_dict_describe, NULL)
|
||||
PHP_FE(enchant_dict_quick_check, third_arg_force_ref)
|
||||
|
||||
{NULL, NULL, NULL} /* Must be the last line in enchant_functions[] */
|
||||
};
|
||||
/* }}} */
|
||||
|
||||
/* {{{ enchant_module_entry
|
||||
*/
|
||||
zend_module_entry enchant_module_entry = {
|
||||
#if ZEND_MODULE_API_NO >= 20010901
|
||||
STANDARD_MODULE_HEADER,
|
||||
#endif
|
||||
"enchant",
|
||||
enchant_functions,
|
||||
PHP_MINIT(enchant),
|
||||
PHP_MSHUTDOWN(enchant),
|
||||
NULL, /* Replace with NULL if there's nothing to do at request start */
|
||||
NULL, /* Replace with NULL if there's nothing to do at request end */
|
||||
PHP_MINFO(enchant),
|
||||
#if ZEND_MODULE_API_NO >= 20010901
|
||||
"0.1", /* Replace with version number for your extension */
|
||||
#endif
|
||||
STANDARD_MODULE_PROPERTIES
|
||||
};
|
||||
/* }}} */
|
||||
|
||||
#ifdef COMPILE_DL_ENCHANT
|
||||
ZEND_GET_MODULE(enchant)
|
||||
#endif
|
||||
|
||||
static void
|
||||
enumerate_providers_fn (const char * const name,
|
||||
const char * const desc,
|
||||
const char * const file,
|
||||
void * ud) /* {{{ */
|
||||
{
|
||||
zval *zdesc = (zval *) ud;
|
||||
zval *tmp_array;
|
||||
|
||||
MAKE_STD_ZVAL(tmp_array);
|
||||
array_init(tmp_array);
|
||||
|
||||
add_assoc_string(tmp_array, "name", (char *)name, 1);
|
||||
add_assoc_string(tmp_array, "desc", (char *)desc, 1);
|
||||
add_assoc_string(tmp_array, "file", (char *)file, 1);
|
||||
|
||||
if (Z_TYPE_P(zdesc)!=IS_ARRAY) {
|
||||
array_init(zdesc);
|
||||
}
|
||||
|
||||
add_next_index_zval(zdesc, tmp_array);
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
static void
|
||||
describe_dict_fn (const char * const lang,
|
||||
const char * const name,
|
||||
const char * const desc,
|
||||
const char * const file,
|
||||
void * ud) /* {{{ */
|
||||
{
|
||||
zval *zdesc = (zval *) ud;
|
||||
array_init(zdesc);
|
||||
add_assoc_string(zdesc, "lang", (char *)lang, 1);
|
||||
add_assoc_string(zdesc, "name", (char *)name, 1);
|
||||
add_assoc_string(zdesc, "desc", (char *)desc, 1);
|
||||
add_assoc_string(zdesc, "file", (char *)file, 1);
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
static void php_enchant_list_dicts_fn( const char * const lang_tag,
|
||||
const char * const provider_name, const char * const provider_desc,
|
||||
const char * const provider_file, void * ud) /* {{{ */
|
||||
{
|
||||
zval *zdesc = (zval *) ud;
|
||||
zval *tmp_array;
|
||||
|
||||
MAKE_STD_ZVAL(tmp_array);
|
||||
array_init(tmp_array);
|
||||
add_assoc_string(tmp_array, "lang_tag", (char *)lang_tag, 1);
|
||||
add_assoc_string(tmp_array, "provider_name", (char *)provider_name, 1);
|
||||
add_assoc_string(tmp_array, "provider_desc", (char *)provider_desc, 1);
|
||||
add_assoc_string(tmp_array, "provider_file", (char *)provider_file, 1);
|
||||
|
||||
if (Z_TYPE_P(zdesc) != IS_ARRAY) {
|
||||
array_init(zdesc);
|
||||
}
|
||||
add_next_index_zval(zdesc, tmp_array);
|
||||
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
static void php_enchant_broker_free(zend_rsrc_list_entry *rsrc TSRMLS_DC) /* {{{ */
|
||||
{
|
||||
if (rsrc->ptr) {
|
||||
enchant_broker *broker = (enchant_broker *)rsrc->ptr;
|
||||
if (broker) {
|
||||
if (broker->pbroker) {
|
||||
if (broker->dictcnt && broker->dict) {
|
||||
if (broker->dict) {
|
||||
int total, tofree;
|
||||
tofree = total = broker->dictcnt-1;
|
||||
do {
|
||||
zend_list_delete(Z_RESVAL_P(broker->dict[total]->rsrc_id));
|
||||
efree(broker->dict[total]);
|
||||
total--;
|
||||
} while (total>=0);
|
||||
}
|
||||
efree(broker->dict);
|
||||
broker->dict = NULL;
|
||||
}
|
||||
enchant_broker_free(broker->pbroker);
|
||||
}
|
||||
efree(broker);
|
||||
}
|
||||
}
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
static void php_enchant_dict_free(zend_rsrc_list_entry *rsrc TSRMLS_DC) /* {{{ */
|
||||
|
||||
{
|
||||
if (rsrc->ptr) {
|
||||
enchant_dict *pdict = (enchant_dict *)rsrc->ptr;
|
||||
if (pdict) {
|
||||
if (pdict->pdict && pdict->pbroker) {
|
||||
enchant_broker_free_dict(pdict->pbroker->pbroker, pdict->pdict);
|
||||
}
|
||||
if (pdict->id) {
|
||||
pdict->pbroker->dict[pdict->id-1]->next = NULL;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
/* {{{ PHP_MINIT_FUNCTION
|
||||
*/
|
||||
PHP_MINIT_FUNCTION(enchant)
|
||||
{
|
||||
le_enchant_broker = zend_register_list_destructors_ex(php_enchant_broker_free, NULL, "enchant broker", module_number);
|
||||
le_enchant_dict = zend_register_list_destructors_ex(php_enchant_dict_free, NULL, "enchant dict", module_number);
|
||||
|
||||
return SUCCESS;
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
/* {{{ PHP_MSHUTDOWN_FUNCTION
|
||||
*/
|
||||
PHP_MSHUTDOWN_FUNCTION(enchant)
|
||||
{
|
||||
return SUCCESS;
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
static void __enumerate_providers_fn (const char * const name,
|
||||
const char * const desc,
|
||||
const char * const file,
|
||||
void * ud) /* {{{ */
|
||||
{
|
||||
php_info_print_table_row(3, name, desc, file);
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
/* {{{ PHP_MINFO_FUNCTION
|
||||
*/
|
||||
PHP_MINFO_FUNCTION(enchant)
|
||||
{
|
||||
EnchantBroker *pbroker;
|
||||
|
||||
pbroker = enchant_broker_init();
|
||||
php_info_print_table_start();
|
||||
php_info_print_table_header(2, "enchant support", "enabled");
|
||||
php_info_print_table_row(2, "Version", "@package_version@");
|
||||
php_info_print_table_row(2, "Revision", "$Revision$");
|
||||
php_info_print_table_end();
|
||||
|
||||
php_info_print_table_start();
|
||||
enchant_broker_describe(pbroker, __enumerate_providers_fn, NULL);
|
||||
php_info_print_table_end();
|
||||
enchant_broker_free(pbroker);
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
#define PHP_ENCHANT_GET_BROKER \
|
||||
ZEND_FETCH_RESOURCE(pbroker, enchant_broker *, &broker, -1, "enchant_broker", le_enchant_broker); \
|
||||
if (!pbroker || !pbroker->pbroker) { \
|
||||
php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", "Resource broker invalid"); \
|
||||
RETURN_FALSE; \
|
||||
}
|
||||
|
||||
#define PHP_ENCHANT_GET_DICT \
|
||||
ZEND_FETCH_RESOURCE(pdict, enchant_dict *, &dict, -1, "enchant dict", le_enchant_dict); \
|
||||
if (!pdict || !pdict->pdict) { \
|
||||
php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", "Invalid dictionary resource."); \
|
||||
RETURN_FALSE; \
|
||||
}
|
||||
|
||||
/* {{{ proto resource enchant_broker_init()
|
||||
create a new broker object capable of requesting */
|
||||
PHP_FUNCTION(enchant_broker_init)
|
||||
{
|
||||
enchant_broker *broker;
|
||||
EnchantBroker *pbroker;
|
||||
|
||||
if (ZEND_NUM_ARGS()) {
|
||||
ZEND_WRONG_PARAM_COUNT();
|
||||
}
|
||||
|
||||
pbroker = enchant_broker_init();
|
||||
|
||||
if (pbroker) {
|
||||
broker = (enchant_broker *) emalloc(sizeof(enchant_broker));
|
||||
broker->pbroker = pbroker;
|
||||
broker->dict = NULL;
|
||||
broker->dictcnt = 0;
|
||||
ZEND_REGISTER_RESOURCE(return_value, broker, le_enchant_broker);
|
||||
broker->rsrc_id = return_value;
|
||||
} else {
|
||||
RETURN_FALSE;
|
||||
}
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
/* {{{ proto boolean enchant_broker_free(resource broker)
|
||||
Destroys the broker object and its dictionnaries */
|
||||
PHP_FUNCTION(enchant_broker_free)
|
||||
{
|
||||
zval *broker;
|
||||
enchant_broker *pbroker;
|
||||
|
||||
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &broker) == FAILURE) {
|
||||
RETURN_FALSE;
|
||||
}
|
||||
PHP_ENCHANT_GET_BROKER;
|
||||
|
||||
zend_list_delete(Z_RESVAL_P(broker));
|
||||
RETURN_TRUE;
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
/* {{{ proto string enchant_broker_get_error(resource broker)
|
||||
Returns the last error of the broker */
|
||||
PHP_FUNCTION(enchant_broker_get_error)
|
||||
{
|
||||
zval *broker;
|
||||
enchant_broker *pbroker;
|
||||
char *msg;
|
||||
|
||||
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &broker) == FAILURE) {
|
||||
RETURN_FALSE;
|
||||
}
|
||||
|
||||
PHP_ENCHANT_GET_BROKER;
|
||||
|
||||
msg = enchant_broker_get_error(pbroker->pbroker);
|
||||
if (msg) {
|
||||
RETURN_STRING((char *)msg, 1);
|
||||
}
|
||||
RETURN_FALSE;
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
/* {{{ proto string enchant_broker_list_dicts(resource broker)
|
||||
Returns the last error of the broker */
|
||||
PHP_FUNCTION(enchant_broker_list_dicts)
|
||||
{
|
||||
zval *broker;
|
||||
enchant_broker *pbroker;
|
||||
EnchantDictDescribeFn describetozval = php_enchant_list_dicts_fn;
|
||||
|
||||
char *msg;
|
||||
|
||||
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &broker) == FAILURE) {
|
||||
RETURN_FALSE;
|
||||
}
|
||||
|
||||
PHP_ENCHANT_GET_BROKER;
|
||||
|
||||
enchant_broker_list_dicts(pbroker->pbroker, php_enchant_list_dicts_fn, (void *)return_value);
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
/* {{{ proto resource enchant_broker_request_dict(resource broker, string tag)
|
||||
create a new dictionary using tag, the non-empty language tag you wish to request
|
||||
a dictionary for ("en_US", "de_DE", ...) */
|
||||
PHP_FUNCTION(enchant_broker_request_dict)
|
||||
{
|
||||
zval *broker;
|
||||
enchant_broker *pbroker;
|
||||
enchant_dict *dict;
|
||||
EnchantDict *d;
|
||||
char *tag;
|
||||
int taglen;
|
||||
int pos;
|
||||
|
||||
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rs", &broker, &tag, &taglen) == FAILURE) {
|
||||
RETURN_FALSE;
|
||||
}
|
||||
|
||||
PHP_ENCHANT_GET_BROKER;
|
||||
|
||||
d = enchant_broker_request_dict(pbroker->pbroker, (const char *)tag);
|
||||
if (d) {
|
||||
if (pbroker->dictcnt) {
|
||||
pbroker->dict = (enchant_dict **)erealloc(pbroker->dict, sizeof(enchant_dict *) * pbroker->dictcnt);
|
||||
pos = pbroker->dictcnt++;
|
||||
} else {
|
||||
pbroker->dict = (enchant_dict **)emalloc(sizeof(enchant_dict *));
|
||||
pos = 0;
|
||||
pbroker->dictcnt++;
|
||||
}
|
||||
|
||||
dict = pbroker->dict[pos] = (enchant_dict *)emalloc(sizeof(enchant_dict));
|
||||
dict->id = pos;
|
||||
dict->pbroker = pbroker;
|
||||
dict->pdict = d;
|
||||
dict->rsrc_id = return_value;
|
||||
dict->prev = pos ? pbroker->dict[pos-1] : NULL;
|
||||
dict->next = NULL;
|
||||
pbroker->dict[pos] = dict;
|
||||
|
||||
if (pos) {
|
||||
pbroker->dict[pos-1]->next = dict;
|
||||
}
|
||||
|
||||
ZEND_REGISTER_RESOURCE(return_value, dict, le_enchant_dict);
|
||||
} else {
|
||||
RETURN_FALSE;
|
||||
}
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
/* {{{ proto resource enchant_broker_request_pwl_dict(resource dict, string filename)
|
||||
creates a dictionary using a PWL file. A PWL file is personal word file one word per line.
|
||||
It must exist before the call.*/
|
||||
PHP_FUNCTION(enchant_broker_request_pwl_dict)
|
||||
{
|
||||
zval *broker;
|
||||
enchant_broker *pbroker;
|
||||
enchant_dict *dict;
|
||||
EnchantDict *d;
|
||||
char *pwl;
|
||||
int pwllen;
|
||||
int pos;
|
||||
|
||||
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rs", &broker, &pwl, &pwllen) == FAILURE) {
|
||||
RETURN_FALSE;
|
||||
}
|
||||
|
||||
if ((PG(safe_mode) && (!php_checkuid(pwl, NULL, CHECKUID_CHECK_FILE_AND_DIR))) || php_check_open_basedir(pwl TSRMLS_CC)) {
|
||||
RETURN_FALSE;
|
||||
}
|
||||
|
||||
PHP_ENCHANT_GET_BROKER;
|
||||
|
||||
d = enchant_broker_request_pwl_dict(pbroker->pbroker, (const char *)pwl);
|
||||
if (d) {
|
||||
if (pbroker->dictcnt) {
|
||||
pos = pbroker->dictcnt++;
|
||||
pbroker->dict = (enchant_dict **)erealloc(pbroker->dict, sizeof(enchant_dict *) * pbroker->dictcnt);
|
||||
} else {
|
||||
pbroker->dict = (enchant_dict **)emalloc(sizeof(enchant_dict *));
|
||||
pos = 0;
|
||||
pbroker->dictcnt++;
|
||||
}
|
||||
dict = pbroker->dict[pos] = (enchant_dict *)emalloc(sizeof(enchant_dict));
|
||||
dict->id = pos;
|
||||
dict->pbroker = pbroker;
|
||||
dict->pdict = d;
|
||||
dict->rsrc_id = return_value;
|
||||
dict->prev = pos?pbroker->dict[pos-1]:NULL;
|
||||
dict->next = NULL;
|
||||
pbroker->dict[pos] = dict;
|
||||
if (pos) {
|
||||
pbroker->dict[pos-1]->next = dict;
|
||||
}
|
||||
ZEND_REGISTER_RESOURCE(return_value, dict, le_enchant_dict);
|
||||
} else {
|
||||
RETURN_FALSE;
|
||||
}
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
/* {{{ proto resource enchant_broker_free_dict(resource dict)
|
||||
Free the dictionary resource */
|
||||
PHP_FUNCTION(enchant_broker_free_dict)
|
||||
{
|
||||
zval *dict;
|
||||
enchant_dict *pdict;
|
||||
|
||||
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &dict) == FAILURE) {
|
||||
RETURN_FALSE;
|
||||
}
|
||||
|
||||
PHP_ENCHANT_GET_DICT;
|
||||
|
||||
zend_list_delete(Z_RESVAL_P(dict));
|
||||
RETURN_TRUE;
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
/* {{{ proto bool enchant_broker_dict_exists(resource broker, string tag)
|
||||
Wether a dictionary exists or not. Using non-empty tag */
|
||||
PHP_FUNCTION(enchant_broker_dict_exists)
|
||||
{
|
||||
zval *broker;
|
||||
char *tag;
|
||||
int taglen;
|
||||
enchant_broker * pbroker;
|
||||
|
||||
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rs", &broker, &tag, &taglen) == FAILURE) {
|
||||
RETURN_FALSE;
|
||||
}
|
||||
|
||||
PHP_ENCHANT_GET_BROKER;
|
||||
|
||||
RETURN_BOOL(enchant_broker_dict_exists(pbroker->pbroker, tag));
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
/* {{{ proto bool enchant_broker_set_ordering(resource broker, string tag, string ordering)
|
||||
Declares a preference of dictionaries to use for the language
|
||||
described/referred to by 'tag'. The ordering is a comma delimited
|
||||
list of provider names. As a special exception, the "*" tag can
|
||||
be used as a language tag to declare a default ordering for any
|
||||
language that does not explictly declare an ordering. */
|
||||
|
||||
PHP_FUNCTION(enchant_broker_set_ordering)
|
||||
{
|
||||
zval *broker;
|
||||
char *pordering;
|
||||
int porderinglen;
|
||||
char *ptag;
|
||||
int ptaglen;
|
||||
enchant_broker * pbroker;
|
||||
|
||||
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rss", &broker, &ptag, &ptaglen, &pordering, &porderinglen) == FAILURE) {
|
||||
RETURN_FALSE;
|
||||
}
|
||||
|
||||
PHP_ENCHANT_GET_BROKER;
|
||||
|
||||
enchant_broker_set_ordering(pbroker->pbroker, ptag, pordering);
|
||||
RETURN_TRUE;
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
/* {{{ proto array enchant_broker_describe(resource broker)
|
||||
Enumerates the Enchant providers and tells
|
||||
you some rudimentary information about them. The same info is provided through phpinfo() */
|
||||
PHP_FUNCTION(enchant_broker_describe)
|
||||
{
|
||||
EnchantBrokerDescribeFn describetozval = enumerate_providers_fn;
|
||||
zval *broker;
|
||||
enchant_broker * pbroker;
|
||||
|
||||
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &broker) == FAILURE) {
|
||||
RETURN_FALSE;
|
||||
}
|
||||
|
||||
PHP_ENCHANT_GET_BROKER;
|
||||
|
||||
enchant_broker_describe(pbroker->pbroker, describetozval, (void *)return_value);
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
/* {{{ proto bool enchant_dict_quick_check(resource dict, string word [, array &suggestions])
|
||||
If the word is correctly spelled return true, otherwise return false, if suggestions variable
|
||||
is provided, fill it with spelling alternatives. */
|
||||
PHP_FUNCTION(enchant_dict_quick_check)
|
||||
{
|
||||
zval *dict, *sugg = NULL;
|
||||
char *word;
|
||||
int wordlen;
|
||||
enchant_dict *pdict;
|
||||
|
||||
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rs|z/", &dict, &word, &wordlen, &sugg) == FAILURE) {
|
||||
RETURN_FALSE;
|
||||
}
|
||||
|
||||
if (sugg) {
|
||||
zval_dtor(sugg);
|
||||
}
|
||||
|
||||
PHP_ENCHANT_GET_DICT;
|
||||
|
||||
if (enchant_dict_check(pdict->pdict, word, wordlen) > 0) {
|
||||
if (!sugg && ZEND_NUM_ARGS() == 2) {
|
||||
RETURN_FALSE;
|
||||
}
|
||||
|
||||
int n_sugg;
|
||||
char **suggs;
|
||||
|
||||
array_init(sugg);
|
||||
|
||||
suggs = enchant_dict_suggest(pdict->pdict, word, wordlen, (size_t *) &n_sugg);
|
||||
if (suggs && n_sugg) {
|
||||
int i;
|
||||
for (i = 0; i < n_sugg; i++) {
|
||||
add_next_index_string(sugg, suggs[i], 1);
|
||||
}
|
||||
enchant_dict_free_suggestions(pdict->pdict, suggs);
|
||||
}
|
||||
|
||||
|
||||
RETURN_FALSE;
|
||||
}
|
||||
RETURN_TRUE;
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
/* {{{ proto bool enchant_dict_check(resource dict, string word)
|
||||
If the word is correctly spelled return true, otherwise return false */
|
||||
PHP_FUNCTION(enchant_dict_check)
|
||||
{
|
||||
zval *dict;
|
||||
char *word;
|
||||
int wordlen;
|
||||
enchant_dict *pdict;
|
||||
|
||||
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rs", &dict, &word, &wordlen) == FAILURE) {
|
||||
RETURN_FALSE;
|
||||
}
|
||||
|
||||
PHP_ENCHANT_GET_DICT;
|
||||
|
||||
RETURN_BOOL(!enchant_dict_check(pdict->pdict, word, wordlen));
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
/* {{{ proto array enchant_dict_suggest(resource dict, string word)
|
||||
Will return a list of values if any of those pre-conditions are not met.*/
|
||||
PHP_FUNCTION(enchant_dict_suggest)
|
||||
{
|
||||
zval *dict;
|
||||
char *word;
|
||||
int wordlen;
|
||||
char **suggs;
|
||||
enchant_dict *pdict;
|
||||
int n_sugg;
|
||||
|
||||
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rs", &dict, &word, &wordlen) == FAILURE) {
|
||||
RETURN_FALSE;
|
||||
}
|
||||
|
||||
PHP_ENCHANT_GET_DICT;
|
||||
|
||||
suggs = enchant_dict_suggest(pdict->pdict, word, wordlen, (size_t *)&n_sugg);
|
||||
if (suggs && n_sugg) {
|
||||
int i;
|
||||
|
||||
array_init(return_value);
|
||||
for (i = 0; i < n_sugg; i++) {
|
||||
add_next_index_string(return_value, suggs[i], 1);
|
||||
}
|
||||
|
||||
enchant_dict_free_suggestions(pdict->pdict, suggs);
|
||||
}
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
/* {{{ proto void enchant_dict_add_to_personal(resource dict, string word)
|
||||
add 'word' to personal word list */
|
||||
PHP_FUNCTION(enchant_dict_add_to_personal)
|
||||
{
|
||||
zval *dict;
|
||||
char *word;
|
||||
int wordlen;
|
||||
enchant_dict *pdict;
|
||||
|
||||
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rs", &dict, &word, &wordlen) == FAILURE) {
|
||||
RETURN_FALSE;
|
||||
}
|
||||
|
||||
PHP_ENCHANT_GET_DICT;
|
||||
|
||||
enchant_dict_add_to_personal(pdict->pdict, word, wordlen);
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
/* {{{ proto void enchant_dict_add_to_session(resource dict, string word)
|
||||
add 'word' to this spell-checking session */
|
||||
PHP_FUNCTION(enchant_dict_add_to_session)
|
||||
{
|
||||
zval *dict;
|
||||
char *word;
|
||||
int wordlen;
|
||||
enchant_dict *pdict;
|
||||
|
||||
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rs", &dict, &word, &wordlen) == FAILURE) {
|
||||
RETURN_FALSE;
|
||||
}
|
||||
|
||||
PHP_ENCHANT_GET_DICT;
|
||||
|
||||
enchant_dict_add_to_session(pdict->pdict, word, wordlen);
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
/* {{{ proto bool enchant_dict_is_in_session(resource dict, string word)
|
||||
whether or not 'word' exists in this spelling-session */
|
||||
PHP_FUNCTION(enchant_dict_is_in_session)
|
||||
{
|
||||
zval *dict;
|
||||
char *word;
|
||||
int wordlen;
|
||||
enchant_dict *pdict;
|
||||
|
||||
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rs", &dict, &word, &wordlen) == FAILURE) {
|
||||
RETURN_FALSE;
|
||||
}
|
||||
|
||||
PHP_ENCHANT_GET_DICT;
|
||||
|
||||
RETURN_BOOL(enchant_dict_is_in_session(pdict->pdict, word, wordlen));
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
/* {{{ proto void enchant_dict_store_replacement(resource dict, string mis, string cor)
|
||||
add a correction for 'mis' using 'cor'.
|
||||
Notes that you replaced @mis with @cor, so it's possibly more likely
|
||||
that future occurrences of @mis will be replaced with @cor. So it might
|
||||
bump @cor up in the suggestion list.*/
|
||||
PHP_FUNCTION(enchant_dict_store_replacement)
|
||||
{
|
||||
zval *dict;
|
||||
char *mis, *cor;
|
||||
int mislen, corlen;
|
||||
|
||||
enchant_dict *pdict;
|
||||
|
||||
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rss", &dict, &mis, &mislen, &cor, &corlen) == FAILURE) {
|
||||
RETURN_FALSE;
|
||||
}
|
||||
|
||||
PHP_ENCHANT_GET_DICT;
|
||||
|
||||
enchant_dict_store_replacement(pdict->pdict, mis, mislen, cor, corlen);
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
/* {{{ proto string enchant_dict_get_error(resource dict)
|
||||
Returns the last error of the current spelling-session */
|
||||
PHP_FUNCTION(enchant_dict_get_error)
|
||||
{
|
||||
zval *dict;
|
||||
enchant_dict *pdict;
|
||||
char *msg;
|
||||
|
||||
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &dict) == FAILURE) {
|
||||
RETURN_FALSE;
|
||||
}
|
||||
|
||||
PHP_ENCHANT_GET_DICT;
|
||||
|
||||
msg = enchant_dict_get_error(pdict->pdict);
|
||||
if (msg) {
|
||||
RETURN_STRING((char *)msg, 1);
|
||||
}
|
||||
|
||||
RETURN_FALSE;
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
/* {{{ proto array enchant_dict_describe(resource dict)
|
||||
Describes an individual dictionary 'dict' */
|
||||
PHP_FUNCTION(enchant_dict_describe)
|
||||
{
|
||||
zval *dict;
|
||||
enchant_dict *pdict;
|
||||
|
||||
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &dict) == FAILURE) {
|
||||
RETURN_FALSE;
|
||||
}
|
||||
|
||||
PHP_ENCHANT_GET_DICT;
|
||||
|
||||
enchant_dict_describe(pdict->pdict, describe_dict_fn, (void *)return_value);
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
/*
|
||||
* Local variables:
|
||||
* tab-width: 4
|
||||
* c-basic-offset: 4
|
||||
* End:
|
||||
* vim600: noet sw=4 ts=4 fdm=marker
|
||||
* vim<600: noet sw=4 ts=4
|
||||
*/
|
||||
@@ -1,148 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<package xmlns="http://pear.php.net/dtd/package-2.0" xmlns:tasks="http://pear.php.net/dtd/tasks-1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" packagerversion="1.4.8" version="2.0" xsi:schemaLocation="http://pear.php.net/dtd/tasks-1.0 http://pear.php.net/dtd/tasks-1.0.xsd http://pear.php.net/dtd/package-2.0 http://pear.php.net/dtd/package-2.0.xsd">
|
||||
<name>enchant</name>
|
||||
<channel>pecl.php.net</channel>
|
||||
<summary>libenchant binder, support near all spelling tools</summary>
|
||||
<description>Enchant is a binder for libenchant. Libenchant provides a common
|
||||
API for many spell libraries:
|
||||
- aspell/pspell (intended to replace ispell)
|
||||
- hspell (hebrew)
|
||||
- ispell
|
||||
- myspell/hunspell (OpenOffice project, mozilla)
|
||||
- uspell (primarily Yiddish, Hebrew, and Eastern European languages)
|
||||
A plugin system allows to add custom spell support.
|
||||
see www.abisource.com/enchant/
|
||||
</description>
|
||||
<lead>
|
||||
<name>Pierre-Alain Joye</name>
|
||||
<user>pajoye</user>
|
||||
<email>paj@pearfr.org</email>
|
||||
<active>yes</active>
|
||||
</lead>
|
||||
<lead>
|
||||
<name>Ilia Alshanetsky</name>
|
||||
<user>iliaa</user>
|
||||
<email>ilia@php.net</email>
|
||||
<active>yes</active>
|
||||
</lead>
|
||||
<date>2006-03-21</date>
|
||||
<version>
|
||||
<release>1.0.1</release>
|
||||
<api>1.1.0</api>
|
||||
</version>
|
||||
<stability>
|
||||
<release>stable</release>
|
||||
<api>stable</api>
|
||||
</stability>
|
||||
<license uri="http://www.php.net/license">PHP</license>
|
||||
<notes>- add enchant_broker_list_dicts to get a list of available dictionaries
|
||||
- fix compilation warnings
|
||||
- add examples
|
||||
- add tests</notes>
|
||||
<contents>
|
||||
<dir name="/">
|
||||
<dir name="docs">
|
||||
<dir name="examples">
|
||||
<file name="example1.php" role="doc"/>
|
||||
</dir>
|
||||
<!-- //docs/examples -->
|
||||
</dir>
|
||||
<!-- //docs -->
|
||||
<file name="config.m4" role="src"/>
|
||||
<file name="config.w32" role="src"/>
|
||||
<file name="CREDITS" role="doc"/>
|
||||
<file name="enchant.c" role="src">
|
||||
<tasks:replace from="@package_version@" to="version" type="package-info"/>
|
||||
</file>
|
||||
<file name="php_enchant.h" role="src"/>
|
||||
<dir name="tests">
|
||||
<file name="broker_describe.phpt" role="test"/>
|
||||
<file name="broker_free.phpt" role="test"/>
|
||||
<file name="broker_init.phpt" role="test"/>
|
||||
<file name="broker_request_dict.phpt" role="test"/>
|
||||
<file name="hindi_correct.txt" role="test"/>
|
||||
<file name="hindi_incorrect.txt" role="test"/>
|
||||
</dir>
|
||||
</dir>
|
||||
<!-- / -->
|
||||
</contents>
|
||||
<dependencies>
|
||||
<required>
|
||||
<php>
|
||||
<min>5</min>
|
||||
</php>
|
||||
<pearinstaller>
|
||||
<min>1.4.0b1</min>
|
||||
</pearinstaller>
|
||||
</required>
|
||||
</dependencies>
|
||||
<providesextension>enchant</providesextension>
|
||||
<extsrcrelease>
|
||||
<configureoption default="shared" name="with-enchant" prompt="libenchant prefix?"/>
|
||||
</extsrcrelease>
|
||||
<changelog>
|
||||
<release>
|
||||
<date>2004-08-11</date>
|
||||
<version>
|
||||
<release>1.0</release>
|
||||
<api>1.0</api>
|
||||
</version>
|
||||
<stability>
|
||||
<release>stable</release>
|
||||
<api>stable</api>
|
||||
</stability>
|
||||
<license uri="http://www.php.net/license">PHP</license>
|
||||
<notes>- Fixed leak inside MINFO function.
|
||||
- Fixed crash inside enchant_dict_suggest() when there are no suggestions.
|
||||
- Added missing safe_mode/open_basedir check inside enchant_broker_request_pwl_dict().
|
||||
- Fixed various function prototypes.
|
||||
- Fixed possible leak in suggestions result.
|
||||
</notes>
|
||||
</release>
|
||||
<release>
|
||||
<version>
|
||||
<release>0.2.1</release>
|
||||
<api>0.2.1</api>
|
||||
</version>
|
||||
<stability>
|
||||
<release>beta</release>
|
||||
<api>beta</api>
|
||||
</stability>
|
||||
<date>2004-03-11</date>
|
||||
<license uri="http://www.php.net/license">PHP</license>
|
||||
<notes>- Fix possible leak in suggestions result
|
||||
- Move to beta status
|
||||
</notes>
|
||||
</release>
|
||||
<release>
|
||||
<version>
|
||||
<release>0.2.0</release>
|
||||
<api>0.2.0</api>
|
||||
</version>
|
||||
<stability>
|
||||
<release>alpha</release>
|
||||
<api>alpha</api>
|
||||
</stability>
|
||||
<date>2006-03-21</date>
|
||||
<license uri="http://www.php.net/license">PHP</license>
|
||||
<notes>- Add Ilia Alshanetsky as maintainer
|
||||
- Cleanup sources codes (ilia)
|
||||
- Add enchant_dict_quick_check (ilia)
|
||||
</notes>
|
||||
</release>
|
||||
<release>
|
||||
<version>
|
||||
<release>0.1</release>
|
||||
<api>0.1</api>
|
||||
</version>
|
||||
<stability>
|
||||
<release>alpha</release>
|
||||
<api>alpha</api>
|
||||
</stability>
|
||||
<date>2003-03-08</date>
|
||||
<license uri="http://www.php.net/license">PHP</license>
|
||||
<notes>Initial release
|
||||
</notes>
|
||||
</release>
|
||||
</changelog>
|
||||
</package>
|
||||
@@ -1,81 +0,0 @@
|
||||
/*
|
||||
+----------------------------------------------------------------------+
|
||||
| PHP Version 4 |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1997-2003 The PHP Group |
|
||||
+----------------------------------------------------------------------+
|
||||
| This source file is subject to version 3.0 of the PHP license, |
|
||||
| that is bundled with this package in the file LICENSE, and is |
|
||||
| available at through the world-wide-web at |
|
||||
| http://www.php.net/license/3_0.txt. |
|
||||
| If you did not receive a copy of the PHP license and are unable to |
|
||||
| obtain it through the world-wide-web, please send a note to |
|
||||
| license@php.net so we can mail you a copy immediately. |
|
||||
+----------------------------------------------------------------------+
|
||||
| Author: Pierre-Alain Joye <paj@pearfr.org> |
|
||||
+----------------------------------------------------------------------+
|
||||
|
||||
$Id$
|
||||
*/
|
||||
|
||||
#ifndef PHP_ENCHANT_H
|
||||
#define PHP_ENCHANT_H
|
||||
|
||||
extern zend_module_entry enchant_module_entry;
|
||||
#define phpext_enchant_ptr &enchant_module_entry
|
||||
|
||||
#ifdef PHP_WIN32
|
||||
#define PHP_ENCHANT_API __declspec(dllexport)
|
||||
#else
|
||||
#define PHP_ENCHANT_API
|
||||
#endif
|
||||
|
||||
#ifdef ZTS
|
||||
#include "TSRM.h"
|
||||
#endif
|
||||
|
||||
static void php_enchant_broker_free(zend_rsrc_list_entry *rsrc TSRMLS_DC);
|
||||
static void php_enchant_dict_free(zend_rsrc_list_entry *rsrc TSRMLS_DC);
|
||||
|
||||
PHP_MINIT_FUNCTION(enchant);
|
||||
PHP_MSHUTDOWN_FUNCTION(enchant);
|
||||
PHP_MINFO_FUNCTION(enchant);
|
||||
|
||||
PHP_FUNCTION(enchant_broker_init);
|
||||
PHP_FUNCTION(enchant_broker_free);
|
||||
PHP_FUNCTION(enchant_broker_get_error);
|
||||
PHP_FUNCTION(enchant_broker_list_dicts);
|
||||
PHP_FUNCTION(enchant_broker_request_dict);
|
||||
PHP_FUNCTION(enchant_broker_request_pwl_dict);
|
||||
PHP_FUNCTION(enchant_broker_free_dict);
|
||||
PHP_FUNCTION(enchant_broker_dict_exists);
|
||||
PHP_FUNCTION(enchant_broker_set_ordering);
|
||||
PHP_FUNCTION(enchant_broker_describe);
|
||||
|
||||
PHP_FUNCTION(enchant_dict_check);
|
||||
PHP_FUNCTION(enchant_dict_suggest);
|
||||
PHP_FUNCTION(enchant_dict_add_to_personal);
|
||||
PHP_FUNCTION(enchant_dict_add_to_session);
|
||||
PHP_FUNCTION(enchant_dict_is_in_session);
|
||||
PHP_FUNCTION(enchant_dict_store_replacement);
|
||||
PHP_FUNCTION(enchant_dict_get_error);
|
||||
PHP_FUNCTION(enchant_dict_describe);
|
||||
PHP_FUNCTION(enchant_dict_quick_check);
|
||||
|
||||
#ifdef ZTS
|
||||
#define ENCHANT_G(v) TSRMG(enchant_globals_id, zend_enchant_globals *, v)
|
||||
#else
|
||||
#define ENCHANT_G(v) (enchant_globals.v)
|
||||
#endif
|
||||
|
||||
#endif /* PHP_ENCHANT_H */
|
||||
|
||||
|
||||
/*
|
||||
* Local variables:
|
||||
* tab-width: 4
|
||||
* c-basic-offset: 4
|
||||
* indent-tabs-mode: t
|
||||
* End:
|
||||
*/
|
||||
|
||||
@@ -1,28 +0,0 @@
|
||||
--TEST--
|
||||
enchant_broker_describe() function
|
||||
--SKIPIF--
|
||||
<?php
|
||||
if(!extension_loaded('enchant')) die('skip, enchant not loader');
|
||||
|
||||
?>
|
||||
--FILE--
|
||||
<?php
|
||||
$broker = enchant_broker_init();
|
||||
|
||||
if(!$broker) exit("failed, broker_init failure\n");
|
||||
|
||||
$provides = enchant_broker_describe($broker);
|
||||
|
||||
if (is_array($provides)) {
|
||||
foreach ($provides as $backend) {
|
||||
if (!(isset($backend['name']) && isset($backend['desc']) && isset($backend['file']))) {
|
||||
exit("failed\n");
|
||||
}
|
||||
}
|
||||
exit("OK\n");
|
||||
} else {
|
||||
echo "failed";
|
||||
}
|
||||
?>
|
||||
--EXPECTF--
|
||||
OK
|
||||
@@ -1,21 +0,0 @@
|
||||
--TEST--
|
||||
enchant_broker_free() function
|
||||
--SKIPIF--
|
||||
<?php
|
||||
if(!extension_loaded('enchant')) die('skip, enchant not loader');
|
||||
|
||||
?>
|
||||
--FILE--
|
||||
<?php
|
||||
$broker = enchant_broker_init();
|
||||
if (is_resource($broker)) {
|
||||
echo "OK\n";
|
||||
enchant_broker_free($broker);
|
||||
} else {
|
||||
exit("init failed\n");
|
||||
}
|
||||
echo "OK\n";
|
||||
?>
|
||||
--EXPECT--
|
||||
OK
|
||||
OK
|
||||
@@ -1,15 +0,0 @@
|
||||
--TEST--
|
||||
enchant_broker_init() function
|
||||
--SKIPIF--
|
||||
<?php
|
||||
if(!extension_loaded('enchant')) die('skip, enchant not loader');
|
||||
|
||||
?>
|
||||
--FILE--
|
||||
<?php
|
||||
$broker = enchant_broker_init();
|
||||
echo is_resource($broker) ? "OK" : "Failure";
|
||||
echo "\n";
|
||||
?>
|
||||
--EXPECT--
|
||||
OK
|
||||
@@ -1,31 +0,0 @@
|
||||
--TEST--
|
||||
enchant_broker_request_dict() function
|
||||
--SKIPIF--
|
||||
<?php
|
||||
if(!extension_loaded('enchant')) die('skip, enchant not loader');
|
||||
?>
|
||||
--FILE--
|
||||
<?php
|
||||
$broker = enchant_broker_init();
|
||||
if (!is_resource($broker)) {
|
||||
exit("init failed\n");
|
||||
}
|
||||
|
||||
$dicts = enchant_broker_list_dicts($broker);
|
||||
if (is_array($dicts)) {
|
||||
if (count($dicts)) {
|
||||
$dict = enchant_broker_request_dict($broker, $dicts[0]['lang_tag']);
|
||||
if (is_resource($dict)) {
|
||||
echo "OK\n";
|
||||
} else {
|
||||
echo "fail to request " . $dicts[0]['lang_tag'];
|
||||
}
|
||||
}
|
||||
} else {
|
||||
exit("list dicts failed\n");
|
||||
}
|
||||
echo "OK\n";
|
||||
?>
|
||||
--EXPECT--
|
||||
OK
|
||||
OK
|
||||
@@ -1 +0,0 @@
|
||||
इस पृष्ठ में एक लिंक बनाने के लिये इस प्रतीक को खीचें व छोड़ें
|
||||
@@ -1 +0,0 @@
|
||||
इस पृष्ठ में एक लिंक बनाने के लिये इस प्रतीक को खच व छड
|
||||
@@ -1,2 +0,0 @@
|
||||
fileinfo
|
||||
Ilia Alshanetsky
|
||||
Whitespace-only changes.
@@ -1,67 +0,0 @@
|
||||
dnl $Id$
|
||||
dnl config.m4 for extension fileinfo
|
||||
|
||||
PHP_ARG_WITH(fileinfo, for fileinfo support,
|
||||
[ --with-fileinfo=DIR Include fileinfo support])
|
||||
|
||||
if test "$PHP_FILEINFO" != "no"; then
|
||||
SEARCH_PATH="/usr/local /usr /usr/share/file"
|
||||
if test -r $PHP_FILEINFO/include/magic.h || test -r $PHP_FILEINFO/magic.h; then
|
||||
FILEINFO_DIR=$PHP_FILEINFO
|
||||
else
|
||||
AC_MSG_CHECKING([for magic files in default path])
|
||||
for i in $SEARCH_PATH ; do
|
||||
if test -r $i/include/magic.h || test -r $i/magic.h; then
|
||||
FILEINFO_DIR=$i
|
||||
AC_MSG_RESULT(found in $i)
|
||||
break
|
||||
fi
|
||||
done
|
||||
fi
|
||||
|
||||
if test -z "$FILEINFO_DIR"; then
|
||||
AC_MSG_RESULT([not found])
|
||||
AC_MSG_ERROR([Please reinstall the libmagic distribution])
|
||||
fi
|
||||
|
||||
if test -r "$FILEINFO_DIR/include/magic.h"; then
|
||||
PHP_ADD_INCLUDE($FILEINFO_DIR/include)
|
||||
else
|
||||
PHP_ADD_INCLUDE($FILEINFO_DIR)
|
||||
fi
|
||||
|
||||
LIBNAME=magic
|
||||
LIBSYMBOL=magic_open
|
||||
|
||||
PHP_CHECK_FUNC(dl, dlopen)
|
||||
PHP_CHECK_FUNC(gzgets, z)
|
||||
PHP_CHECK_FUNC(round, m)
|
||||
|
||||
PHP_CHECK_LIBRARY($LIBNAME,$LIBSYMBOL,
|
||||
[
|
||||
PHP_ADD_LIBRARY_WITH_PATH($LIBNAME, $FILEINFO_DIR/lib, FILEINFO_SHARED_LIBADD)
|
||||
AC_DEFINE(HAVE_FILEINFOLIB,1,[ ])
|
||||
],[
|
||||
AC_MSG_ERROR([wrong magic lib version or lib not found])
|
||||
],[
|
||||
-L$FILEINFO_DIR/lib
|
||||
])
|
||||
|
||||
MAGIC_MIME_DIRS="/usr/local/share/file /usr/share/file /usr/share/misc/file /etc /usr/share/misc"
|
||||
MAGIC_MIME_FILENAMES="magic magic.mime"
|
||||
|
||||
for i in $MAGIC_MIME_DIRS; do
|
||||
for j in $MAGIC_MIME_FILENAMES; do
|
||||
if test -f "$i/$j"; then
|
||||
PHP_DEFAULT_MAGIC_FILE="$i/$j"
|
||||
break
|
||||
fi
|
||||
done
|
||||
done
|
||||
|
||||
AC_DEFINE_UNQUOTED(PHP_DEFAULT_MAGIC_FILE,"$PHP_DEFAULT_MAGIC_FILE",[magic file path])
|
||||
|
||||
PHP_SUBST(FILEINFO_SHARED_LIBADD)
|
||||
|
||||
PHP_NEW_EXTENSION(fileinfo, fileinfo.c, $ext_shared)
|
||||
fi
|
||||
@@ -1,13 +0,0 @@
|
||||
// $Id$
|
||||
// vim:ft=javascript
|
||||
|
||||
ARG_WITH("fileinfo", "fileinfo support", "no");
|
||||
|
||||
if (PHP_FILEINFO != 'no' &&
|
||||
CHECK_HEADER_ADD_INCLUDE('magic.h', 'CFLAGS_FILEINFO') &&
|
||||
CHECK_LIB(PHP_DEBUG != 'no'?'libmagic-staticd.lib':'libmagic-static.lib',
|
||||
'fileinfo', PHP_FILEINFO)) {
|
||||
EXTENSION('fileinfo', 'fileinfo.c');
|
||||
AC_DEFINE('USE_MAGIC_STATIC', '', '');
|
||||
}
|
||||
|
||||
@@ -1,448 +0,0 @@
|
||||
/*
|
||||
+----------------------------------------------------------------------+
|
||||
| PHP Version 5 |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1997-2004 The PHP Group |
|
||||
+----------------------------------------------------------------------+
|
||||
| This source file is subject to version 3.0 of the PHP license, |
|
||||
| that is bundled with this package in the file LICENSE, and is |
|
||||
| available through the world-wide-web at the following url: |
|
||||
| http://www.php.net/license/3_0.txt. |
|
||||
| If you did not receive a copy of the PHP license and are unable to |
|
||||
| obtain it through the world-wide-web, please send a note to |
|
||||
| license@php.net so we can mail you a copy immediately. |
|
||||
+----------------------------------------------------------------------+
|
||||
| Author: Ilia Alshanetsky <ilia@php.net> |
|
||||
+----------------------------------------------------------------------+
|
||||
*/
|
||||
|
||||
/* $Id$ */
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
#endif
|
||||
#include "php.h"
|
||||
|
||||
#include <magic.h>
|
||||
/*
|
||||
* HOWMANY specifies the maximum offset libmagic will look at
|
||||
* this is currently hardcoded in the libmagic source but not exported
|
||||
*/
|
||||
#ifndef HOWMANY
|
||||
#define HOWMANY 65536
|
||||
#endif
|
||||
|
||||
|
||||
#include "php_ini.h"
|
||||
#include "ext/standard/info.h"
|
||||
#include "ext/standard/file.h" /* needed for context stuff */
|
||||
#include "php_fileinfo.h"
|
||||
#include "fopen_wrappers.h" /* needed for is_url */
|
||||
|
||||
struct php_fileinfo {
|
||||
long options;
|
||||
struct magic_set *magic;
|
||||
};
|
||||
|
||||
#ifndef PHP_DEFAULT_MAGIC_FILE
|
||||
#define PHP_DEFAULT_MAGIC_FILE NULL
|
||||
#endif
|
||||
|
||||
#ifdef ZEND_ENGINE_2
|
||||
|
||||
static zend_object_handlers finfo_object_handlers;
|
||||
zend_class_entry *finfo_class_entry;
|
||||
|
||||
struct finfo_object {
|
||||
zend_object zo;
|
||||
struct php_fileinfo *ptr;
|
||||
};
|
||||
|
||||
#define FILEINFO_DECLARE_INIT_OBJECT(object) \
|
||||
zval *object = getThis();
|
||||
|
||||
#define FILEINFO_REGISTER_OBJECT(_object, _ptr) \
|
||||
{ \
|
||||
struct finfo_object *obj; \
|
||||
obj = (struct finfo_object*)zend_object_store_get_object(_object TSRMLS_CC); \
|
||||
obj->ptr = _ptr; \
|
||||
}
|
||||
|
||||
#define FILEINFO_FROM_OBJECT(finfo, object) \
|
||||
{ \
|
||||
struct finfo_object *obj = zend_object_store_get_object(object TSRMLS_CC); \
|
||||
finfo = obj->ptr; \
|
||||
if (!finfo) { \
|
||||
php_error_docref(NULL TSRMLS_CC, E_WARNING, "The invalid fileinfo object."); \
|
||||
RETURN_FALSE; \
|
||||
} \
|
||||
}
|
||||
|
||||
/* {{{ finfo_objects_dtor
|
||||
*/
|
||||
static void finfo_objects_dtor(void *object, zend_object_handle handle TSRMLS_DC)
|
||||
{
|
||||
struct finfo_object *intern = (struct finfo_object *) object;
|
||||
|
||||
if (intern->ptr) {
|
||||
magic_close(intern->ptr->magic);
|
||||
efree(intern->ptr);
|
||||
}
|
||||
|
||||
efree(intern);
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
/* {{{ finfo_objects_new
|
||||
*/
|
||||
PHP_FILEINFO_API zend_object_value finfo_objects_new(zend_class_entry *class_type TSRMLS_DC)
|
||||
{
|
||||
zend_object_value retval;
|
||||
struct finfo_object *intern;
|
||||
|
||||
intern = ecalloc(1, sizeof(struct finfo_object));
|
||||
intern->zo.ce = class_type;
|
||||
intern->zo.properties = NULL;
|
||||
#if ZEND_MODULE_API_NO >= 20050922
|
||||
intern->zo.guards = NULL;
|
||||
#else
|
||||
intern->zo.in_get = 0;
|
||||
intern->zo.in_set = 0;
|
||||
#endif
|
||||
intern->ptr = NULL;
|
||||
|
||||
retval.handle = zend_objects_store_put(intern, finfo_objects_dtor, NULL, NULL TSRMLS_CC);
|
||||
retval.handlers = (zend_object_handlers *) &finfo_object_handlers;
|
||||
|
||||
return retval;
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
/* {{{ finfo_class_functions
|
||||
*/
|
||||
function_entry finfo_class_functions[] = {
|
||||
#if PHP_VERSION_ID >= 50200
|
||||
ZEND_ME_MAPPING(finfo, finfo_open, NULL, ZEND_ACC_PUBLIC)
|
||||
ZEND_ME_MAPPING(set_flags, finfo_set_flags,NULL, ZEND_ACC_PUBLIC)
|
||||
ZEND_ME_MAPPING(file, finfo_file, NULL, ZEND_ACC_PUBLIC)
|
||||
ZEND_ME_MAPPING(buffer, finfo_buffer, NULL, ZEND_ACC_PUBLIC)
|
||||
#else
|
||||
ZEND_ME_MAPPING(finfo, finfo_open, NULL)
|
||||
ZEND_ME_MAPPING(set_flags, finfo_set_flags,NULL)
|
||||
ZEND_ME_MAPPING(file, finfo_file, NULL)
|
||||
ZEND_ME_MAPPING(buffer, finfo_buffer, NULL)
|
||||
#endif
|
||||
{NULL, NULL, NULL}
|
||||
};
|
||||
/* }}} */
|
||||
|
||||
#else
|
||||
|
||||
#define FILEINFO_REGISTER_OBJECT(_object, _ptr) {}
|
||||
#define FILEINFO_FROM_OBJECT(socket_id, object) {}
|
||||
|
||||
#define FILEINFO_DECLARE_INIT_OBJECT(object)
|
||||
#define object 0
|
||||
|
||||
#endif
|
||||
|
||||
#define FINFO_SET_OPTION(magic, options) \
|
||||
if (magic_setflags(magic, options) == -1) { \
|
||||
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Failed to set option '%ld' %d:%s", \
|
||||
options, magic_errno(magic), magic_error(magic)); \
|
||||
RETURN_FALSE; \
|
||||
}
|
||||
|
||||
/* True global resources - no need for thread safety here */
|
||||
static int le_fileinfo;
|
||||
|
||||
void finfo_resource_destructor(zend_rsrc_list_entry *rsrc TSRMLS_DC)
|
||||
{
|
||||
if (rsrc->ptr) {
|
||||
struct php_fileinfo *finfo = (struct php_fileinfo *) rsrc->ptr;
|
||||
magic_close(finfo->magic);
|
||||
efree(rsrc->ptr);
|
||||
rsrc->ptr = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
/* {{{ fileinfo_functions[]
|
||||
*/
|
||||
function_entry fileinfo_functions[] = {
|
||||
PHP_FE(finfo_open, NULL)
|
||||
PHP_FE(finfo_close, NULL)
|
||||
PHP_FE(finfo_set_flags, NULL)
|
||||
PHP_FE(finfo_file, NULL)
|
||||
PHP_FE(finfo_buffer, NULL)
|
||||
{NULL, NULL, NULL}
|
||||
};
|
||||
/* }}} */
|
||||
|
||||
/* {{{ PHP_MINIT_FUNCTION
|
||||
*/
|
||||
PHP_MINIT_FUNCTION(finfo)
|
||||
{
|
||||
#ifdef ZEND_ENGINE_2
|
||||
zend_class_entry _finfo_class_entry;
|
||||
INIT_CLASS_ENTRY(_finfo_class_entry, "finfo", finfo_class_functions);
|
||||
_finfo_class_entry.create_object = finfo_objects_new;
|
||||
finfo_class_entry = zend_register_internal_class(&_finfo_class_entry TSRMLS_CC);
|
||||
|
||||
/* copy the standard object handlers to you handler table */
|
||||
memcpy(&finfo_object_handlers, zend_get_std_object_handlers(), sizeof(zend_object_handlers));
|
||||
#endif /* ZEND_ENGINE_2 */
|
||||
|
||||
le_fileinfo = zend_register_list_destructors_ex(finfo_resource_destructor, NULL, "file_info", module_number);
|
||||
|
||||
REGISTER_LONG_CONSTANT("FILEINFO_NONE", MAGIC_NONE, CONST_CS|CONST_PERSISTENT);
|
||||
REGISTER_LONG_CONSTANT("FILEINFO_SYMLINK", MAGIC_SYMLINK, CONST_CS|CONST_PERSISTENT);
|
||||
REGISTER_LONG_CONSTANT("FILEINFO_MIME", MAGIC_MIME, CONST_CS|CONST_PERSISTENT);
|
||||
REGISTER_LONG_CONSTANT("FILEINFO_COMPRESS", MAGIC_COMPRESS, CONST_CS|CONST_PERSISTENT);
|
||||
REGISTER_LONG_CONSTANT("FILEINFO_DEVICES", MAGIC_DEVICES, CONST_CS|CONST_PERSISTENT);
|
||||
REGISTER_LONG_CONSTANT("FILEINFO_CONTINUE", MAGIC_CONTINUE, CONST_CS|CONST_PERSISTENT);
|
||||
#ifdef MAGIC_PRESERVE_ATIME
|
||||
REGISTER_LONG_CONSTANT("FILEINFO_PRESERVE_ATIME", MAGIC_PRESERVE_ATIME, CONST_CS|CONST_PERSISTENT);
|
||||
#endif
|
||||
#ifdef MAGIC_RAW
|
||||
REGISTER_LONG_CONSTANT("FILEINFO_RAW", MAGIC_RAW, CONST_CS|CONST_PERSISTENT);
|
||||
#endif
|
||||
|
||||
return SUCCESS;
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
/* {{{ fileinfo_module_entry
|
||||
*/
|
||||
zend_module_entry fileinfo_module_entry = {
|
||||
#if ZEND_MODULE_API_NO >= 20010901
|
||||
STANDARD_MODULE_HEADER,
|
||||
#endif
|
||||
"fileinfo",
|
||||
fileinfo_functions,
|
||||
PHP_MINIT(finfo),
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
PHP_MINFO(fileinfo),
|
||||
#if ZEND_MODULE_API_NO >= 20010901
|
||||
"0.1", /* Replace with version number for your extension */
|
||||
#endif
|
||||
STANDARD_MODULE_PROPERTIES
|
||||
};
|
||||
/* }}} */
|
||||
|
||||
#ifdef COMPILE_DL_FILEINFO
|
||||
ZEND_GET_MODULE(fileinfo)
|
||||
#endif
|
||||
|
||||
/* {{{ PHP_MINFO_FUNCTION
|
||||
*/
|
||||
PHP_MINFO_FUNCTION(fileinfo)
|
||||
{
|
||||
php_info_print_table_start();
|
||||
php_info_print_table_header(2, "fileinfo support", "enabled");
|
||||
php_info_print_table_end();
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
/* {{{ proto resource finfo_open([int options [, string arg]])
|
||||
Create a new fileinfo resource. */
|
||||
PHP_FUNCTION(finfo_open)
|
||||
{
|
||||
long options = MAGIC_NONE;
|
||||
char *file = PHP_DEFAULT_MAGIC_FILE;
|
||||
int file_len = 0;
|
||||
struct php_fileinfo *finfo;
|
||||
FILEINFO_DECLARE_INIT_OBJECT(object)
|
||||
char resolved_path[MAXPATHLEN];
|
||||
|
||||
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|ls", &options, &file, &file_len) == FAILURE) {
|
||||
RETURN_FALSE;
|
||||
}
|
||||
|
||||
if (file_len) { /* user specified filed, perform open_basedir checks */
|
||||
if (!VCWD_REALPATH(file, resolved_path)) {
|
||||
RETURN_FALSE;
|
||||
}
|
||||
file = resolved_path;
|
||||
|
||||
if ((PG(safe_mode) && (!php_checkuid(file, NULL, CHECKUID_CHECK_FILE_AND_DIR))) || php_check_open_basedir(file TSRMLS_CC)) {
|
||||
RETURN_FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
finfo = emalloc(sizeof(struct php_fileinfo));
|
||||
|
||||
finfo->options = options;
|
||||
finfo->magic = magic_open(options);
|
||||
|
||||
if (finfo->magic == NULL) {
|
||||
efree(finfo);
|
||||
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid mode '%ld'.", options);
|
||||
RETURN_FALSE;
|
||||
}
|
||||
|
||||
if (magic_load(finfo->magic, file) == -1) {
|
||||
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Failed to load magic database at '%s'.", file);
|
||||
magic_close(finfo->magic);
|
||||
efree(finfo);
|
||||
RETURN_FALSE;
|
||||
}
|
||||
|
||||
if (object) {
|
||||
FILEINFO_REGISTER_OBJECT(object, finfo);
|
||||
} else {
|
||||
ZEND_REGISTER_RESOURCE(return_value, finfo, le_fileinfo);
|
||||
}
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
/* {{{ proto resource finfo_close(resource finfo)
|
||||
Close fileinfo resource. */
|
||||
PHP_FUNCTION(finfo_close)
|
||||
{
|
||||
struct php_fileinfo *finfo;
|
||||
zval *zfinfo;
|
||||
|
||||
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z", &zfinfo) == FAILURE) {
|
||||
RETURN_FALSE;
|
||||
}
|
||||
ZEND_FETCH_RESOURCE(finfo, struct php_fileinfo *, &zfinfo, -1, "file_info", le_fileinfo);
|
||||
|
||||
zend_list_delete(Z_RESVAL_P(zfinfo));
|
||||
|
||||
RETURN_TRUE;
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
/* {{{ proto bool finfo_set_flags(resource finfo, int options)
|
||||
Set libmagic configuration options. */
|
||||
PHP_FUNCTION(finfo_set_flags)
|
||||
{
|
||||
long options;
|
||||
struct php_fileinfo *finfo;
|
||||
zval *zfinfo;
|
||||
FILEINFO_DECLARE_INIT_OBJECT(object)
|
||||
|
||||
if (object) {
|
||||
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &options) == FAILURE) {
|
||||
RETURN_FALSE;
|
||||
}
|
||||
FILEINFO_FROM_OBJECT(finfo, object);
|
||||
} else {
|
||||
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "zl", &zfinfo, &options) == FAILURE) {
|
||||
RETURN_FALSE;
|
||||
}
|
||||
ZEND_FETCH_RESOURCE(finfo, struct php_fileinfo *, &zfinfo, -1, "file_info", le_fileinfo);
|
||||
}
|
||||
|
||||
FINFO_SET_OPTION(finfo->magic, options)
|
||||
finfo->options = options;
|
||||
|
||||
RETURN_TRUE;
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
static void _php_finfo_get_type(INTERNAL_FUNCTION_PARAMETERS, int mode)
|
||||
{
|
||||
long options = 0;
|
||||
char *buffer, *tmp, *ret_val;
|
||||
int buffer_len;
|
||||
struct php_fileinfo *finfo;
|
||||
zval *zfinfo, *zcontext = NULL;
|
||||
FILEINFO_DECLARE_INIT_OBJECT(object)
|
||||
|
||||
if (object) {
|
||||
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|lbz", &buffer, &buffer_len, &options, &zcontext) == FAILURE) {
|
||||
RETURN_FALSE;
|
||||
}
|
||||
FILEINFO_FROM_OBJECT(finfo, object);
|
||||
} else {
|
||||
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "zs|lbz", &zfinfo, &buffer, &buffer_len, &options, &zcontext) == FAILURE) {
|
||||
RETURN_FALSE;
|
||||
}
|
||||
ZEND_FETCH_RESOURCE(finfo, struct php_fileinfo *, &zfinfo, -1, "file_info", le_fileinfo);
|
||||
}
|
||||
|
||||
/* Set options for the current file/buffer. */
|
||||
if (options) {
|
||||
FINFO_SET_OPTION(finfo->magic, options)
|
||||
}
|
||||
|
||||
if (mode) { /* file */
|
||||
/* determine if the file is a local file or remote URL */
|
||||
char *tmp2;
|
||||
php_stream_wrapper *wrap = php_stream_locate_url_wrapper(buffer, &tmp2, 0 TSRMLS_CC);
|
||||
if (wrap && wrap->is_url) {
|
||||
#ifdef ZEND_ENGINE_2
|
||||
php_stream_context *context = php_stream_context_from_zval(zcontext, 0);
|
||||
#else
|
||||
php_stream_context *context = NULL;
|
||||
#endif
|
||||
php_stream *stream = php_stream_open_wrapper_ex(buffer, "rb",
|
||||
ENFORCE_SAFE_MODE | REPORT_ERRORS, NULL, context);
|
||||
if (!stream) {
|
||||
RETURN_FALSE;
|
||||
}
|
||||
buffer_len = php_stream_copy_to_mem(stream, &tmp, HOWMANY, 0);
|
||||
php_stream_close(stream);
|
||||
|
||||
if (buffer_len == 0) {
|
||||
RETURN_FALSE;
|
||||
}
|
||||
} else { /* local file */
|
||||
char resolved_path[MAXPATHLEN];
|
||||
if (!VCWD_REALPATH(buffer, resolved_path)) {
|
||||
RETURN_FALSE;
|
||||
}
|
||||
|
||||
ret_val = (char *) magic_file(finfo->magic, buffer);
|
||||
goto common;
|
||||
}
|
||||
} else { /* buffer */
|
||||
tmp = buffer;
|
||||
}
|
||||
|
||||
ret_val = (char *) magic_buffer(finfo->magic, tmp, buffer_len);
|
||||
if (mode) {
|
||||
efree(tmp);
|
||||
}
|
||||
common:
|
||||
/* Restore options */
|
||||
if (options) {
|
||||
FINFO_SET_OPTION(finfo->magic, finfo->options)
|
||||
}
|
||||
|
||||
if (!ret_val) {
|
||||
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Failed identify data %d:%s",
|
||||
magic_errno(finfo->magic), magic_error(finfo->magic));
|
||||
RETURN_FALSE;
|
||||
} else {
|
||||
RETURN_STRING(ret_val, 1);
|
||||
}
|
||||
}
|
||||
|
||||
/* {{{ proto string finfo_file(resource finfo, char *file_name [, int options [, resource context]])
|
||||
Return information about a file. */
|
||||
PHP_FUNCTION(finfo_file)
|
||||
{
|
||||
_php_finfo_get_type(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1);
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
/* {{{ proto string finfo_buffer(resource finfo, char *string [, int options])
|
||||
Return infromation about a string buffer. */
|
||||
PHP_FUNCTION(finfo_buffer)
|
||||
{
|
||||
_php_finfo_get_type(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0);
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
/*
|
||||
* Local variables:
|
||||
* tab-width: 4
|
||||
* c-basic-offset: 4
|
||||
* End:
|
||||
* vim600: noet sw=4 ts=4 fdm=marker
|
||||
* vim<600: noet sw=4 ts=4
|
||||
*/
|
||||
@@ -1,29 +0,0 @@
|
||||
<?php
|
||||
if(!extension_loaded('fileinfo')) {
|
||||
dl('fileinfo.' . PHP_SHLIB_SUFFIX);
|
||||
}
|
||||
if(!extension_loaded('fileinfo')) {
|
||||
die("fileinfo extension is not avaliable, please compile it.\n");
|
||||
}
|
||||
|
||||
// normal operation
|
||||
$res = finfo_open(FILEINFO_MIME); /* return mime type ala mimetype extension */
|
||||
$files = glob("*");
|
||||
foreach ($files as $file) {
|
||||
echo finfo_file($res, $file) . "\n";
|
||||
}
|
||||
finfo_close($res);
|
||||
|
||||
// OO mode
|
||||
/*
|
||||
* FILEINFO_PRESERVE_ATIME - if possible preserve the original access time
|
||||
* FILEINFO_SYMLINK - follow symlinks
|
||||
* FILEINFO_DEVICES - look at the contents of blocks or character special devices
|
||||
* FILEINFO_COMPRESS - decompress compressed files
|
||||
*/
|
||||
$fi = new finfo(FILEINFO_PRESERVE_ATIME|FILEINFO_SYMLINK|FILEINFO_DEVICES|FILEINFO_COMPRESS);
|
||||
$files = glob("*");
|
||||
foreach ($files as $file) {
|
||||
echo $fi->buffer(file_get_contents($file)) . "\n";
|
||||
}
|
||||
?>
|
||||
@@ -1,44 +0,0 @@
|
||||
<?xml version="1.0" encoding="ISO-8859-1" ?>
|
||||
<!DOCTYPE package SYSTEM "../pear/package.dtd">
|
||||
<package>
|
||||
<name>Fileinfo</name>
|
||||
<summary>libmagic bindings</summary>
|
||||
<maintainers>
|
||||
<maintainer>
|
||||
<user>iliaa</user>
|
||||
<name>Ilia Alshanetsky</name>
|
||||
<email>ilia@php.net</email>
|
||||
<role>lead</role>
|
||||
</maintainer>
|
||||
</maintainers>
|
||||
<description>
|
||||
This extension allows retrieval of information regarding vast majority of file.
|
||||
This information may include dimensions, quality, length etc...
|
||||
|
||||
Additionally it can also be used to retrieve the mime type for a particular
|
||||
file and for text files proper language encoding.
|
||||
</description>
|
||||
<license>PHP</license>
|
||||
<release>
|
||||
<state>stable</state>
|
||||
<version>1.0.4</version>
|
||||
<date>2006-11-07</date>
|
||||
<notes>
|
||||
1) Fixed detection of magic files
|
||||
2) Fixed build problems with older version of libmagic
|
||||
</notes>
|
||||
<filelist>
|
||||
<file role="src" name="config.m4"/>
|
||||
<file role="src" name="fileinfo.c"/>
|
||||
<file role="src" name="php_fileinfo.h"/>
|
||||
<file role="doc" name="CREDITS"/>
|
||||
<file role="doc" name="EXPERIMENTAL"/>
|
||||
<file role="doc" name="fileinfo.php"/>
|
||||
</filelist>
|
||||
<deps>
|
||||
</deps>
|
||||
</release>
|
||||
</package>
|
||||
<!--
|
||||
vim:et:ts=1:sw=1
|
||||
-->
|
||||
@@ -1,61 +0,0 @@
|
||||
/*
|
||||
+----------------------------------------------------------------------+
|
||||
| PHP Version 5 |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1997-2004 The PHP Group |
|
||||
+----------------------------------------------------------------------+
|
||||
| This source file is subject to version 3.0 of the PHP license, |
|
||||
| that is bundled with this package in the file LICENSE, and is |
|
||||
| available through the world-wide-web at the following url: |
|
||||
| http://www.php.net/license/3_0.txt. |
|
||||
| If you did not receive a copy of the PHP license and are unable to |
|
||||
| obtain it through the world-wide-web, please send a note to |
|
||||
| license@php.net so we can mail you a copy immediately. |
|
||||
+----------------------------------------------------------------------+
|
||||
| Author: Ilia Alshanetsky <ilia@php.net> |
|
||||
+----------------------------------------------------------------------+
|
||||
*/
|
||||
|
||||
/* $Id$ */
|
||||
|
||||
#ifndef PHP_FILEINFO_H
|
||||
#define PHP_FILEINFO_H
|
||||
|
||||
extern zend_module_entry fileinfo_module_entry;
|
||||
#define phpext_fileinfo_ptr &fileinfo_module_entry
|
||||
|
||||
#ifdef PHP_WIN32
|
||||
#define PHP_FILEINFO_API __declspec(dllexport)
|
||||
#else
|
||||
#define PHP_FILEINFO_API
|
||||
#endif
|
||||
|
||||
#ifdef ZTS
|
||||
#include "TSRM.h"
|
||||
#endif
|
||||
|
||||
PHP_MINFO_FUNCTION(fileinfo);
|
||||
|
||||
PHP_FUNCTION(finfo_open);
|
||||
PHP_FUNCTION(finfo_close);
|
||||
PHP_FUNCTION(finfo_set_flags);
|
||||
PHP_FUNCTION(finfo_file);
|
||||
PHP_FUNCTION(finfo_buffer);
|
||||
|
||||
#ifdef ZTS
|
||||
#define FILEINFO_G(v) TSRMG(fileinfo_globals_id, zend_fileinfo_globals *, v)
|
||||
#else
|
||||
#define FILEINFO_G(v) (fileinfo_globals.v)
|
||||
#endif
|
||||
|
||||
#endif /* PHP_FILEINFO_H */
|
||||
|
||||
|
||||
/*
|
||||
* Local variables:
|
||||
* tab-width: 4
|
||||
* c-basic-offset: 4
|
||||
* End:
|
||||
* vim600: noet sw=4 ts=4 fdm=marker
|
||||
* vim<600: noet sw=4 ts=4
|
||||
*/
|
||||
-103
@@ -1,103 +0,0 @@
|
||||
#ifndef _INCLUDED_IMAP_H
|
||||
#define _INCLUDED_IMAP_H
|
||||
|
||||
#if COMPILE_DL
|
||||
#undef HAVE_IMAP
|
||||
#define HAVE_IMAP 1
|
||||
#endif
|
||||
|
||||
#if HAVE_IMAP
|
||||
|
||||
#ifndef PHP_WIN32
|
||||
#include "build-defs.h"
|
||||
#endif
|
||||
|
||||
/* Functions accessable to PHP */
|
||||
extern zend_module_entry imap_module_entry;
|
||||
#define imap_module_ptr &imap_module_entry
|
||||
|
||||
extern PHP_MINIT_FUNCTION(imap);
|
||||
extern PHP_RINIT_FUNCTION(imap);
|
||||
extern PHP_RSHUTDOWN_FUNCTION(imap);
|
||||
PHP_MINFO_FUNCTION(imap);
|
||||
PHP_FUNCTION(imap_open);
|
||||
PHP_FUNCTION(imap_popen);
|
||||
PHP_FUNCTION(imap_reopen);
|
||||
PHP_FUNCTION(imap_num_msg);
|
||||
PHP_FUNCTION(imap_num_recent);
|
||||
PHP_FUNCTION(imap_headers);
|
||||
PHP_FUNCTION(imap_headerinfo);
|
||||
PHP_FUNCTION(imap_rfc822_parse_headers);
|
||||
PHP_FUNCTION(imap_body);
|
||||
PHP_FUNCTION(imap_fetchstructure);
|
||||
PHP_FUNCTION(imap_fetchbody);
|
||||
PHP_FUNCTION(imap_expunge);
|
||||
PHP_FUNCTION(imap_delete);
|
||||
PHP_FUNCTION(imap_undelete);
|
||||
PHP_FUNCTION(imap_check);
|
||||
PHP_FUNCTION(imap_close);
|
||||
PHP_FUNCTION(imap_mail_copy);
|
||||
PHP_FUNCTION(imap_mail_move);
|
||||
PHP_FUNCTION(imap_createmailbox);
|
||||
PHP_FUNCTION(imap_renamemailbox);
|
||||
PHP_FUNCTION(imap_deletemailbox);
|
||||
PHP_FUNCTION(imap_listmailbox);
|
||||
PHP_FUNCTION(imap_scanmailbox);
|
||||
PHP_FUNCTION(imap_subscribe);
|
||||
PHP_FUNCTION(imap_unsubscribe);
|
||||
PHP_FUNCTION(imap_append);
|
||||
PHP_FUNCTION(imap_ping);
|
||||
PHP_FUNCTION(imap_base64);
|
||||
PHP_FUNCTION(imap_qprint);
|
||||
PHP_FUNCTION(imap_8bit);
|
||||
PHP_FUNCTION(imap_binary);
|
||||
PHP_FUNCTION(imap_mailboxmsginfo);
|
||||
PHP_FUNCTION(imap_rfc822_write_address);
|
||||
PHP_FUNCTION(imap_rfc822_parse_adrlist);
|
||||
PHP_FUNCTION(imap_setflag_full);
|
||||
PHP_FUNCTION(imap_clearflag_full);
|
||||
PHP_FUNCTION(imap_sort);
|
||||
PHP_FUNCTION(imap_fetchheader);
|
||||
PHP_FUNCTION(imap_fetchtext);
|
||||
PHP_FUNCTION(imap_uid);
|
||||
PHP_FUNCTION(imap_msgno);
|
||||
PHP_FUNCTION(imap_list);
|
||||
PHP_FUNCTION(imap_list_full);
|
||||
PHP_FUNCTION(imap_listscan);
|
||||
PHP_FUNCTION(imap_lsub);
|
||||
PHP_FUNCTION(imap_lsub_full);
|
||||
PHP_FUNCTION(imap_create);
|
||||
PHP_FUNCTION(imap_rename);
|
||||
PHP_FUNCTION(imap_status);
|
||||
PHP_FUNCTION(imap_bodystruct);
|
||||
PHP_FUNCTION(imap_fetch_overview);
|
||||
PHP_FUNCTION(imap_mail_compose);
|
||||
PHP_FUNCTION(imap_alerts);
|
||||
PHP_FUNCTION(imap_errors);
|
||||
PHP_FUNCTION(imap_last_error);
|
||||
PHP_FUNCTION(imap_mail);
|
||||
PHP_FUNCTION(imap_search);
|
||||
PHP_FUNCTION(imap_utf8);
|
||||
PHP_FUNCTION(imap_utf7_decode);
|
||||
PHP_FUNCTION(imap_utf7_encode);
|
||||
PHP_FUNCTION(imap_mime_header_decode);
|
||||
#else
|
||||
#define imap_module_ptr NULL
|
||||
#endif /* HAVE_IMAP */
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#define phpext_imap_ptr imap_module_ptr
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -1,2 +0,0 @@
|
||||
phar
|
||||
Gregory Beaver, Marcus Boerger
|
||||
@@ -1,68 +0,0 @@
|
||||
--------------------------------------------------------------------
|
||||
The PHP License, version 3.01
|
||||
Copyright (c) 1999 - 2005 The PHP Group. All rights reserved.
|
||||
--------------------------------------------------------------------
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, is permitted provided that the following conditions
|
||||
are met:
|
||||
|
||||
1. Redistributions of source code must retain the above copyright
|
||||
notice, this list of conditions and the following disclaimer.
|
||||
|
||||
2. Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in
|
||||
the documentation and/or other materials provided with the
|
||||
distribution.
|
||||
|
||||
3. The name "PHP" must not be used to endorse or promote products
|
||||
derived from this software without prior written permission. For
|
||||
written permission, please contact group@php.net.
|
||||
|
||||
4. Products derived from this software may not be called "PHP", nor
|
||||
may "PHP" appear in their name, without prior written permission
|
||||
from group@php.net. You may indicate that your software works in
|
||||
conjunction with PHP by saying "Foo for PHP" instead of calling
|
||||
it "PHP Foo" or "phpfoo"
|
||||
|
||||
5. The PHP Group may publish revised and/or new versions of the
|
||||
license from time to time. Each version will be given a
|
||||
distinguishing version number.
|
||||
Once covered code has been published under a particular version
|
||||
of the license, you may always continue to use it under the terms
|
||||
of that version. You may also choose to use such covered code
|
||||
under the terms of any subsequent version of the license
|
||||
published by the PHP Group. No one other than the PHP Group has
|
||||
the right to modify the terms applicable to covered code created
|
||||
under this License.
|
||||
|
||||
6. Redistributions of any form whatsoever must retain the following
|
||||
acknowledgment:
|
||||
"This product includes PHP software, freely available from
|
||||
<http://www.php.net/software/>".
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE PHP DEVELOPMENT TEAM ``AS IS'' AND
|
||||
ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
||||
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
|
||||
PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE PHP
|
||||
DEVELOPMENT TEAM OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
||||
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
|
||||
OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
--------------------------------------------------------------------
|
||||
|
||||
This software consists of voluntary contributions made by many
|
||||
individuals on behalf of the PHP Group.
|
||||
|
||||
The PHP Group can be contacted via Email at group@php.net.
|
||||
|
||||
For more information on the PHP Group and the PHP project,
|
||||
please see <http://www.php.net>.
|
||||
|
||||
PHP includes the Zend Engine, freely available at
|
||||
<http://www.zend.com>.
|
||||
@@ -1,13 +0,0 @@
|
||||
|
||||
$(srcdir)/phar_path_check.c: $(srcdir)/phar_path_check.re
|
||||
$(RE2C) -b -o $(srcdir)/phar_path_check.c $(srcdir)/phar_path_check.re)
|
||||
|
||||
pharcmd: $(builddir)/phar.php $(builddir)/phar.phar
|
||||
|
||||
$(builddir)/phar.php: $(srcdir)/build_precommand.php $(srcdir)/phar/*.inc $(srcdir)/phar/*.php
|
||||
php $(srcdir)/build_precommand.php > $(builddir)/phar.php
|
||||
|
||||
$(builddir)/phar.phar: $(builddir)/phar.php $(srcdir)/phar/*.inc $(srcdir)/phar/*.php
|
||||
php -d phar.readonly=0 $(srcdir)/phar.php pack -f $(builddir)/phar.phar -a pharcommand -c auto -x CVS -p 0 -s $(srcdir)/phar/phar.php -h sha1 $(srcdir)/phar/
|
||||
@chmod +x $(builddir)/phar.phar
|
||||
|
||||
@@ -1,77 +0,0 @@
|
||||
Version 1.0.0
|
||||
|
||||
X make permissions in the lowest bits of flags to simplify using them [Greg]
|
||||
X implement ini handler for phar.readonly and phar.require_hash that allows
|
||||
enabling it on PHP_INI_ALL if it is disabled in the system, but does not
|
||||
allow disabling it if it is enabled in the system [Greg]
|
||||
X implement reading in metadata in manifest as <len32><metadata...> [Marcus]
|
||||
X implement writing out of metadata to new manifest [Marcus]
|
||||
X if SPL is disabled, enable only static methods of class Phar and disable
|
||||
class PharFileInfo completely [Marcus]
|
||||
X implement in-phar locking, so that a file that is opened for reading can't
|
||||
have a handle opened for writing [Marcus/Greg]
|
||||
X docs on file format/manifest description [Greg]
|
||||
X docs on uses [Greg]
|
||||
X stream context for specifying compression of a file [Marcus]
|
||||
X stream context for specifying meta-data [Greg]
|
||||
X Phar->begin()/Phar->commit() for specifying a new stub to the phar,
|
||||
and deferring flush until all modifications are complete [Greg]
|
||||
X Phar->getStub() for retrieving the stub of the phar [Marcus]
|
||||
X add setUncompressed(), setCompressedGZ() and setCompressedBZ2() to
|
||||
PharFileInfo class [Greg]
|
||||
X add uncompressAllFiles(), compressAllFilesGZ() and compressAllFilesBZ2()
|
||||
to Phar class [Greg]
|
||||
X add PharFileInfo::setMetaData($metadata) [Marcus]
|
||||
X add PharFileInfo::getMetaData() [Marcus]
|
||||
X always throw exceptions from the Phar object, and E_RECOVERABLE_ERROR from
|
||||
streams interface [Greg]
|
||||
X Phar archive metadata Phar::setMetaData($metadata) Phar::getMetaData() [Greg]
|
||||
X support rename() in stream wrapper [Greg]
|
||||
X update docs to reflect changes in error handling [Greg]
|
||||
X fix 011.phpt, 029.phpt for uncaught exceptions causing bad cleanup [Marcus/Greg]
|
||||
|
||||
Version 1.1.0
|
||||
|
||||
X Ability connect a phar file 'phar://whatever' to a directory. That way all
|
||||
access to that phar archive are directed to the extracted directory. This
|
||||
allows to have the installed files and the archieve keep the same includes.
|
||||
[Marcus]
|
||||
X add SHA-2 (256, 512) support [Marcus]
|
||||
X setSignatureAlgorithm() and Phar::MD5 Phar::SHA1 Phar::SHA256 Phar::SHA512 Phar::PGP to
|
||||
choose the kind of signature to use (PGP falls back to SHA1) [Greg]
|
||||
|
||||
|
||||
Version 1.2.0
|
||||
|
||||
X add PharFileInfo::hasMetadata(), PharFileInfo::delMetadata() [Marcus]
|
||||
X add Phar::hasMetadata(), Phar::delMetadata() [Marcus]
|
||||
X fix Phar::CanWrite() [Marcus]
|
||||
X add preliminary phar command (phar.php) [Marcus]
|
||||
X add phar command (phar.phar) [Marcus]
|
||||
X list all available compression methods using Phar::getSupportedCompression() [Marcus]
|
||||
X Remove RINIT [Marcus]
|
||||
|
||||
Version 1.2.1
|
||||
|
||||
X Add Phar::getAlias() [Marcus]
|
||||
* Add Phar::setAlias()
|
||||
X Make -a optional in pack subcommand of phar.phar [Marcus]
|
||||
X Make Phar::loadPhar() and Phar::mapPhar() ignore extracted archives
|
||||
|
||||
Version 1.3.0
|
||||
|
||||
* Provide an additional header that allows better compatibility with PHP 4
|
||||
__HALT_COMPILER();function __HALT_COMPILER(){}$a=<<<PHARDATABEGIN\n
|
||||
* ability to have Phar object return file class as offsetGet() result
|
||||
* ability to store empty directories
|
||||
* [optional] Phar->rollback() to abort a write transaction
|
||||
* implement PPG signing
|
||||
* ability to match files containing a metadata key opendir('phar://a.phar/?mime-type=image/jpeg')
|
||||
or foreach ($p->match('mime-type', 'image/jpeg') as $file)
|
||||
* Phar::copy($from, $to);
|
||||
* Phar::delete($what)
|
||||
* Phar::buildFromIterator($filename, Iterator $it, array $addinfo = null);
|
||||
$addinfo = array('alias','flags','metadata','stub'...)
|
||||
* Layout: Option to compress all content rather than single files.
|
||||
That excludes stub and manifest haeder.
|
||||
* stream context option for cleaning crap paths like phar://blah.phar/file//to\\here.php
|
||||
@@ -1,60 +0,0 @@
|
||||
#!/usr/bin/php
|
||||
<?php echo '<'.'?php';?>
|
||||
|
||||
/** @file phar.php
|
||||
* @ingroup Phar
|
||||
* @brief class Phar Pre Command
|
||||
* @author Marcus Boerger
|
||||
* @date 2007 - 2007
|
||||
*
|
||||
* Phar Command
|
||||
*/
|
||||
foreach(array("SPL", "Reflection", "Phar") as $ext)
|
||||
{
|
||||
if (!extension_loaded($ext))
|
||||
{
|
||||
echo "$argv[0] requires PHP extension $ext.\n";
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
<?php
|
||||
|
||||
$classes = array(
|
||||
'DirectoryTreeIterator',
|
||||
'DirectoryGraphIterator',
|
||||
'InvertedRegexIterator',
|
||||
'CLICommand',
|
||||
'PharCommand',
|
||||
);
|
||||
|
||||
foreach($classes as $name)
|
||||
{
|
||||
echo "if (!class_exists('$name', 0))\n{\n";
|
||||
$f = file(dirname(__FILE__) . '/phar/' . strtolower($name) . '.inc');
|
||||
unset($f[0]);
|
||||
$c = count($f);
|
||||
while ($c && (strlen($f[$c]) == 0 || $f[$c] == "\n" || $f[$c] == "\r\n"))
|
||||
{
|
||||
unset($f[$c--]);
|
||||
}
|
||||
if (substr($f[$c], -2) == "\r\n") {
|
||||
$f[$c] = substr($f[$c], 0, -2);
|
||||
}
|
||||
if (substr($f[$c], -1) == "\n") {
|
||||
$f[$c] = substr($f[$c], 0, -1);
|
||||
}
|
||||
if (substr($f[$c], -2) == '?>') {
|
||||
$f[$c] = substr($f[$c], 0,-2);
|
||||
}
|
||||
while ($c && (strlen($f[$c]) == 0 || $f[$c] == "\n" || $f[$c] == "\r\n"))
|
||||
{
|
||||
unset($f[$c--]);
|
||||
}
|
||||
echo join('', $f);
|
||||
echo "\n}\n\n";
|
||||
}
|
||||
|
||||
echo 'new PharCommand($argc, $argv);'."\n";
|
||||
|
||||
?>
|
||||
@@ -1,13 +0,0 @@
|
||||
dnl $Id$
|
||||
dnl config.m4 for extension phar
|
||||
|
||||
PHP_ARG_ENABLE(phar, for phar support/phar zlib support,
|
||||
[ --enable-phar Enable phar support, use --with-zlib-dir if zlib detection fails])
|
||||
|
||||
if test "$PHP_PHAR" != "no"; then
|
||||
PHP_NEW_EXTENSION(phar, phar.c phar_object.c phar_path_check.c, $ext_shared)
|
||||
PHP_ADD_EXTENSION_DEP(phar, zlib, true)
|
||||
PHP_ADD_EXTENSION_DEP(phar, bz2, true)
|
||||
PHP_ADD_EXTENSION_DEP(phar, spl, false)
|
||||
PHP_ADD_MAKEFILE_FRAGMENT
|
||||
fi
|
||||
@@ -1,11 +0,0 @@
|
||||
// $Id$
|
||||
// vim:ft=javascript
|
||||
|
||||
ARG_ENABLE("phar", "enable phar support", "no");
|
||||
|
||||
if (PHP_PHAR != "no") {
|
||||
EXTENSION("phar", "phar.c phar_object.c phar_path_check.c");
|
||||
ADD_EXTENSION_DEP('phar', 'zlib', true);
|
||||
ADD_EXTENSION_DEP('phar', 'bz2', true);
|
||||
ADD_EXTENSION_DEP('phar', 'spl', false);
|
||||
}
|
||||
@@ -1,75 +0,0 @@
|
||||
<?php
|
||||
|
||||
$notes = '
|
||||
* add Phar::getAlias() [Marcus]
|
||||
* Made -a optional in pack subcommand of phar.phar [Marcus]
|
||||
* Fix issue with apache module and extracted archives [Marcus]
|
||||
* Send all error messages to stderr in phar.phar [Marcus]
|
||||
* Added new subcommands add and delete to phar.phar [Marcus]
|
||||
* Made Phar::loadPhar() and Phar::mapPhar() ignore extracted archives [Marcus]
|
||||
* Fix issue with compressed entries and uncompressing entries [Marcus]
|
||||
* Verify stubs before writing [Marcus]
|
||||
* Always use longest stub end to avoid issues with length field [Marcus]
|
||||
';
|
||||
|
||||
if (!class_exists("Phar") && !extension_loaded("Phar")) {
|
||||
die("Extension phar not present");
|
||||
}
|
||||
|
||||
require_once 'PEAR/PackageFileManager2.php';
|
||||
|
||||
PEAR::setErrorHandling(PEAR_ERROR_DIE);
|
||||
|
||||
$options = array(
|
||||
'filelistgenerator' => 'CVS',
|
||||
'changelogoldtonew' => false,
|
||||
'simpleoutput' => true,
|
||||
'baseinstalldir' => '/',
|
||||
'packagedirectory' => dirname(__FILE__),
|
||||
'packagefile' => 'package.xml',
|
||||
'clearcontents' => true,
|
||||
'ignore' => array('package*.php', 'package*.xml'),
|
||||
'dir_roles' => array(
|
||||
'docs' => 'doc',
|
||||
'examples' => 'doc',
|
||||
'tests' => 'test',
|
||||
'phar' => 'src',
|
||||
),
|
||||
'exceptions' => array(
|
||||
'CREDITS' => 'doc',
|
||||
'EXPERIMENTAL' => 'doc',
|
||||
'LICENSE' => 'doc',
|
||||
'Makefile.frag' => 'src',
|
||||
'phar_path_check.re' => 'src',
|
||||
'TODO' => 'doc',
|
||||
),
|
||||
);
|
||||
|
||||
$package = PEAR_PackageFileManager2::importOptions(dirname(__FILE__) . '/package.xml', $options);
|
||||
|
||||
$package->clearDeps();
|
||||
$package->setPhpDep('5.2.0');
|
||||
$package->setPearInstallerDep('1.4.3');
|
||||
$package->addPackageDepWithChannel('optional', 'bz2', 'pecl.php.net', false, false, false, false, 'bz2');
|
||||
// all this false business sets the <providesextension> tag that allows us to have hash built
|
||||
// in statically
|
||||
$package->addPackageDepWithChannel('optional', 'hash', 'pecl.php.net', false, false, false, false, 'hash');
|
||||
$package->addExtensionDep('optional', 'spl');
|
||||
$package->addExtensionDep('optional', 'zlib');
|
||||
$package->setPackageType('extsrc');
|
||||
$package->addRelease();
|
||||
$package->setReleaseVersion(phpversion('phar'));
|
||||
$package->setAPIVersion(Phar::apiVersion());
|
||||
$package->setReleaseStability('stable');
|
||||
$package->setAPIStability('stable');
|
||||
$package->setNotes("\n$notes\n");
|
||||
//$package->addGlobalReplacement('package-info', '@package_version@', 'version');
|
||||
$package->generateContents();
|
||||
|
||||
if (isset($_GET['make']) || (isset($_SERVER['argv']) && @$_SERVER['argv'][1] == 'make')) {
|
||||
$package->writePackageFile();
|
||||
} else {
|
||||
$package->debugPackageFile();
|
||||
}
|
||||
|
||||
?>
|
||||
@@ -1,283 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<package packagerversion="1.5.4" version="2.0" xmlns="http://pear.php.net/dtd/package-2.0" xmlns:tasks="http://pear.php.net/dtd/tasks-1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://pear.php.net/dtd/tasks-1.0 http://pear.php.net/dtd/tasks-1.0.xsd http://pear.php.net/dtd/package-2.0 http://pear.php.net/dtd/package-2.0.xsd">
|
||||
<name>phar</name>
|
||||
<channel>pecl.php.net</channel>
|
||||
<summary>allows running of complete applications out of .phar files (like Java .jar files)</summary>
|
||||
<description>This is the extension version of PEAR's PHP_Archive package. Support for
|
||||
zlib, bz2 and crc32 is achieved without any dependency other than the external
|
||||
zlib or bz2 extension.
|
||||
|
||||
.phar files can be read using the phar stream, or with the Phar class. If the SPL extension
|
||||
is available, a Phar object can be used as an array to iterate over a phar's contents
|
||||
or to read files directly from the phar.
|
||||
|
||||
Phar archives can be created using the streams API or with the Phar class, if
|
||||
the phar.readonly ini variable is set to false.
|
||||
|
||||
Full support for MD5 and SHA1 signatures is possible. Signatures can be required
|
||||
if the ini variable phar.require_hash is set to true. When PECL extension hash is
|
||||
avaiable then SHA-256 and SHA-512 signatures are supported as well.</description>
|
||||
<lead>
|
||||
<name>Greg Beaver</name>
|
||||
<user>cellog</user>
|
||||
<email>cellog@php.net</email>
|
||||
<active>yes</active>
|
||||
</lead>
|
||||
<lead>
|
||||
<name>Marcus Boerger</name>
|
||||
<user>helly</user>
|
||||
<email>helly@php.net</email>
|
||||
<active>yes</active>
|
||||
</lead>
|
||||
<date>2007-05-18</date>
|
||||
<time>06:32:38</time>
|
||||
<version>
|
||||
<release>1.2.0</release>
|
||||
<api>1.1.0</api>
|
||||
</version>
|
||||
<stability>
|
||||
<release>stable</release>
|
||||
<api>stable</api>
|
||||
</stability>
|
||||
<license uri="http://www.php.net/license">PHP License</license>
|
||||
<notes>
|
||||
|
||||
* add PharFileInfo::hasMetadata(), PharFileInfo::delMetadata() [Marcus]
|
||||
* add Phar::hasMetadata(), Phar::delMetadata() [Marcus]
|
||||
* fix Phar::CanWrite() [Marcus]
|
||||
* add preliminary phar command (phar.php) [Marcus]
|
||||
* add phar command (phar.phar) [Marcus]
|
||||
* list all available compression methods using Phar::getSupportedCompression() [Marcus]
|
||||
* remove RINIT [Marcus]
|
||||
|
||||
</notes>
|
||||
<contents>
|
||||
<dir baseinstalldir="/" name="/">
|
||||
<dir name="phar">
|
||||
<file name="clicommand.inc" role="src" />
|
||||
<file name="directorygraphiterator.inc" role="src" />
|
||||
<file name="directorytreeiterator.inc" role="src" />
|
||||
<file name="invertedregexiterator.inc" role="src" />
|
||||
<file name="phar.php" role="src" />
|
||||
<file name="pharcommand.inc" role="src" />
|
||||
</dir> <!-- /phar -->
|
||||
<dir name="tests">
|
||||
<file name="001.phpt" role="test" />
|
||||
<file name="002.phpt" role="test" />
|
||||
<file name="003.phpt" role="test" />
|
||||
<file name="003a.phpt" role="test" />
|
||||
<file name="004.phpt" role="test" />
|
||||
<file name="005.phpt" role="test" />
|
||||
<file name="006.phpt" role="test" />
|
||||
<file name="007.phpt" role="test" />
|
||||
<file name="008.phpt" role="test" />
|
||||
<file name="009.phpt" role="test" />
|
||||
<file name="010.phpt" role="test" />
|
||||
<file name="011.phpt" role="test" />
|
||||
<file name="012.phpt" role="test" />
|
||||
<file name="013.phpt" role="test" />
|
||||
<file name="014.phpt" role="test" />
|
||||
<file name="015.phpt" role="test" />
|
||||
<file name="015b.phpt" role="test" />
|
||||
<file name="016.phpt" role="test" />
|
||||
<file name="016b.phpt" role="test" />
|
||||
<file name="017.phpt" role="test" />
|
||||
<file name="018.phpt" role="test" />
|
||||
<file name="019.phpt" role="test" />
|
||||
<file name="019b.phpt" role="test" />
|
||||
<file name="019c.phpt" role="test" />
|
||||
<file name="020.phpt" role="test" />
|
||||
<file name="021.phpt" role="test" />
|
||||
<file name="022.phpt" role="test" />
|
||||
<file name="023.phpt" role="test" />
|
||||
<file name="024.phpt" role="test" />
|
||||
<file name="025.phpt" role="test" />
|
||||
<file name="026.phpt" role="test" />
|
||||
<file name="027.phpt" role="test" />
|
||||
<file name="028.phpt" role="test" />
|
||||
<file name="029.phpt" role="test" />
|
||||
<file name="030.phpt" role="test" />
|
||||
<file name="031.phpt" role="test" />
|
||||
<file name="032.phpt" role="test" />
|
||||
<file name="033.phpt" role="test" />
|
||||
<file name="033a.phpt" role="test" />
|
||||
<file name="create_new_and_modify.phpt" role="test" />
|
||||
<file name="create_new_phar.phpt" role="test" />
|
||||
<file name="create_new_phar_b.phpt" role="test" />
|
||||
<file name="create_new_phar_c.phpt" role="test" />
|
||||
<file name="create_path_error.phpt" role="test" />
|
||||
<file name="delete_in_phar.phpt" role="test" />
|
||||
<file name="delete_in_phar_b.phpt" role="test" />
|
||||
<file name="delete_in_phar_confirm.phpt" role="test" />
|
||||
<file name="extracted.inc" role="test" />
|
||||
<file name="extracted_001.phpt" role="test" />
|
||||
<file name="ini_set.phpt" role="test" />
|
||||
<file name="ini_set_off.phpt" role="test" />
|
||||
<file name="metadata_read.phpt" role="test" />
|
||||
<file name="metadata_write.phpt" role="test" />
|
||||
<file name="metadata_write_commit.phpt" role="test" />
|
||||
<file name="open_for_write_existing.phpt" role="test" />
|
||||
<file name="open_for_write_existing_b.phpt" role="test" />
|
||||
<file name="open_for_write_existing_c.phpt" role="test" />
|
||||
<file name="open_for_write_newfile.phpt" role="test" />
|
||||
<file name="open_for_write_newfile_b.phpt" role="test" />
|
||||
<file name="open_for_write_newfile_c.phpt" role="test" />
|
||||
<file name="phar_begin_setstub_commit.phpt" role="test" />
|
||||
<file name="phar_commitwrite.phpt" role="test" />
|
||||
<file name="phar_create_in_cwd.phpt" role="test" />
|
||||
<file name="phar_ctx_001.phpt" role="test" />
|
||||
<file name="phar_get_suppoted_signatures_001.phpt" role="test" />
|
||||
<file name="phar_get_suppoted_signatures_002.phpt" role="test" />
|
||||
<file name="phar_metadata_read.phpt" role="test" />
|
||||
<file name="phar_metadata_write.phpt" role="test" />
|
||||
<file name="phar_offset_get_error.phpt" role="test" />
|
||||
<file name="phar_oo_001.phpt" role="test" />
|
||||
<file name="phar_oo_002.phpt" role="test" />
|
||||
<file name="phar_oo_003.phpt" role="test" />
|
||||
<file name="phar_oo_004.phpt" role="test" />
|
||||
<file name="phar_oo_005.phpt" role="test" />
|
||||
<file name="phar_oo_006.phpt" role="test" />
|
||||
<file name="phar_oo_007.phpt" role="test" />
|
||||
<file name="phar_oo_008.phpt" role="test" />
|
||||
<file name="phar_oo_009.phpt" role="test" />
|
||||
<file name="phar_oo_010.phpt" role="test" />
|
||||
<file name="phar_oo_011.phpt" role="test" />
|
||||
<file name="phar_oo_011b.phpt" role="test" />
|
||||
<file name="phar_oo_012.phpt" role="test" />
|
||||
<file name="phar_oo_012b.phpt" role="test" />
|
||||
<file name="phar_oo_012_confirm.phpt" role="test" />
|
||||
<file name="phar_oo_compressallbz2.phpt" role="test" />
|
||||
<file name="phar_oo_compressallgz.phpt" role="test" />
|
||||
<file name="phar_oo_compressed_001.phpt" role="test" />
|
||||
<file name="phar_oo_compressed_001b.phpt" role="test" />
|
||||
<file name="phar_oo_compressed_002.phpt" role="test" />
|
||||
<file name="phar_oo_compressed_002b.phpt" role="test" />
|
||||
<file name="phar_oo_test.inc" role="test" />
|
||||
<file name="phar_oo_uncompressall.phpt" role="test" />
|
||||
<file name="phar_setsignaturealgo1.phpt" role="test" />
|
||||
<file name="phar_setsignaturealgo2.phpt" role="test" />
|
||||
<file name="phar_stub.phpt" role="test" />
|
||||
<file name="phar_stub_error.phpt" role="test" />
|
||||
<file name="phar_stub_write.phpt" role="test" />
|
||||
<file name="phar_test.inc" role="test" />
|
||||
<file name="refcount1.phpt" role="test" />
|
||||
<file name="rename.phpt" role="test" />
|
||||
</dir> <!-- /tests -->
|
||||
<file name="config.m4" role="src" />
|
||||
<file name="config.w32" role="src" />
|
||||
<file name="CREDITS" role="doc" />
|
||||
<file name="LICENSE" role="doc" />
|
||||
<file name="Makefile.frag" role="src" />
|
||||
<file name="phar.c" role="src" />
|
||||
<file name="phar.php" role="php" />
|
||||
<file name="phar_internal.h" role="src" />
|
||||
<file name="phar_object.c" role="src" />
|
||||
<file name="phar_path_check.c" role="src" />
|
||||
<file name="phar_path_check.re" role="src" />
|
||||
<file name="php_phar.h" role="src" />
|
||||
<file name="TODO" role="doc" />
|
||||
</dir> <!-- / -->
|
||||
</contents>
|
||||
<dependencies>
|
||||
<required>
|
||||
<php>
|
||||
<min>5.2.0</min>
|
||||
</php>
|
||||
<pearinstaller>
|
||||
<min>1.4.3</min>
|
||||
</pearinstaller>
|
||||
</required>
|
||||
<optional>
|
||||
<package>
|
||||
<name>bz2</name>
|
||||
<channel>pecl.php.net</channel>
|
||||
<providesextension>bz2</providesextension>
|
||||
</package>
|
||||
<package>
|
||||
<name>hash</name>
|
||||
<channel>pecl.php.net</channel>
|
||||
<providesextension>hash</providesextension>
|
||||
</package>
|
||||
<extension>
|
||||
<name>spl</name>
|
||||
</extension>
|
||||
<extension>
|
||||
<name>zlib</name>
|
||||
</extension>
|
||||
</optional>
|
||||
</dependencies>
|
||||
<providesextension>phar</providesextension>
|
||||
<extsrcrelease />
|
||||
<changelog>
|
||||
<release>
|
||||
<version>
|
||||
<release>1.2.0</release>
|
||||
<api>1.1.0</api>
|
||||
</version>
|
||||
<stability>
|
||||
<release>stable</release>
|
||||
<api>stable</api>
|
||||
</stability>
|
||||
<date>2007-05-18</date>
|
||||
<license uri="http://www.php.net/license">PHP License</license>
|
||||
<notes>
|
||||
|
||||
* add PharFileInfo::hasMetadata(), PharFileInfo::delMetadata() [Marcus]
|
||||
* add Phar::hasMetadata(), Phar::delMetadata() [Marcus]
|
||||
* fix Phar::CanWrite() [Marcus]
|
||||
* add preliminary phar command (phar.php) [Marcus]
|
||||
* add phar command (phar.phar) [Marcus]
|
||||
* list all available compression methods using Phar::getSupportedCompression() [Marcus]
|
||||
* remove RINIT [Marcus]
|
||||
|
||||
</notes>
|
||||
</release>
|
||||
<release>
|
||||
<version>
|
||||
<release>1.1.0</release>
|
||||
<api>1.1.0</api>
|
||||
</version>
|
||||
<stability>
|
||||
<release>stable</release>
|
||||
<api>stable</api>
|
||||
</stability>
|
||||
<date>2007-04-12</date>
|
||||
<license uri="http://www.php.net/license">PHP License</license>
|
||||
<notes>* implement ability connect a phar file 'phar://whatever' to a directory. That way all
|
||||
access to that phar archive are directed to the extracted directory. This
|
||||
allows to have the installed files and the archieve keep the same includes.
|
||||
[Marcus]
|
||||
* implement SHA-2 (256, 512) support [Marcus]
|
||||
* implement setSignatureAlgorithm() and Phar::MD5 Phar::SHA1 Phar::SHA256 Phar::SHA512 Phar::PGP to
|
||||
choose the kind of signature to use (PGP falls back to SHA1) [Greg]</notes>
|
||||
</release>
|
||||
<release>
|
||||
<version>
|
||||
<release>1.0.1</release>
|
||||
<api>1.0.1</api>
|
||||
</version>
|
||||
<stability>
|
||||
<release>stable</release>
|
||||
<api>stable</api>
|
||||
</stability>
|
||||
<date>2007-03-28</date>
|
||||
<license uri="http://www.php.net/license">PHP License</license>
|
||||
<notes>* Fix return value of unlink() and rename() when used for phar archievs. [Marcus]</notes>
|
||||
</release>
|
||||
<release>
|
||||
<version>
|
||||
<release>1.0.0</release>
|
||||
<api>1.0.0</api>
|
||||
</version>
|
||||
<stability>
|
||||
<release>stable</release>
|
||||
<api>stable</api>
|
||||
</stability>
|
||||
<date>2007-03-26</date>
|
||||
<license uri="http://www.php.net/license">PHP License</license>
|
||||
<notes>*BACKWARDS COMPATIBILITY BREAK*
|
||||
Rename Phar->begin/isFlushingToPhar/commit to startBuffering/isBuffering/stopBuffering
|
||||
Note that isBuffering() returns the opposite value to isFlushingToPhar()</notes>
|
||||
</release>
|
||||
</changelog>
|
||||
</package>
|
||||
-3561
File diff suppressed because it is too large.
Load diff
-1227
File diff suppressed because it is too large.
Load diff
@@ -1,377 +0,0 @@
|
||||
<?php
|
||||
|
||||
/** @file clicommand.inc
|
||||
* @ingroup Phar
|
||||
* @brief class CLICommand
|
||||
* @author Marcus Boerger
|
||||
* @date 2007 - 2007
|
||||
*
|
||||
* Phar Command
|
||||
*/
|
||||
|
||||
/** @ingroup Phar
|
||||
* @brief Abstract base console command implementation
|
||||
* @author Marcus Boerger
|
||||
* @version 1.0
|
||||
*/
|
||||
abstract class CLICommand
|
||||
{
|
||||
protected $argc;
|
||||
protected $argv;
|
||||
protected $cmds = array();
|
||||
protected $args = array();
|
||||
protected $typs = array();
|
||||
|
||||
function __construct($argc, array $argv)
|
||||
{
|
||||
$this->argc = $argc;
|
||||
$this->argv = $argv;
|
||||
$this->cmds = self::getCommands($this);
|
||||
$this->typs = self::getArgTyps($this);
|
||||
|
||||
if ($argc < 2) {
|
||||
self::error("No command given, check ${argv[0]} help\n");
|
||||
} elseif (!isset($this->cmds[$argv[1]]['run'])) {
|
||||
self::error("Unknown command '${argv[1]}', check ${argv[0]} help\n");
|
||||
} else {
|
||||
$command = $argv[1];
|
||||
}
|
||||
|
||||
if (isset($this->cmds[$command]['arg'])) {
|
||||
$this->args = call_user_func(array($this, $this->cmds[$command]['arg']));
|
||||
$i = 1;
|
||||
$missing = false;
|
||||
while (++$i < $argc) {
|
||||
if ($argv[$i][0] == '-') {
|
||||
if (strlen($argv[$i]) == 2 && isset($this->args[$argv[$i][1]])) {
|
||||
$arg = $argv[$i][1];
|
||||
if (++$i >= $argc) {
|
||||
self::error("Missing argument to parameter '$arg' of command '$command', check ${argv[0]} help\n");
|
||||
} else {
|
||||
$this->args[$arg]['val'] = $this->checkArgTyp($arg, $i, $argc, $argv);
|
||||
}
|
||||
} else {
|
||||
self::error("Unknown parameter '${argv[$i]}' to command $command, check ${argv[0]} help\n");
|
||||
}
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (isset($this->args[''])) {
|
||||
if ($i >= $argc) {
|
||||
if (isset($this->args['']['require']) && $this->args['']['require']) {
|
||||
self::error("Missing default trailing arguments to command $command, check ${argv[0]} help\n");
|
||||
}
|
||||
} else {
|
||||
$this->args['']['val'] = array();
|
||||
while($i < $argc) {
|
||||
$this->args['']['val'][] = $argv[$i++];
|
||||
}
|
||||
}
|
||||
} else if ($i < $argc) {
|
||||
self::error("Unexpected default arguments to command $command, check ${argv[0]} help\n");
|
||||
}
|
||||
|
||||
foreach($this->args as $arg => $inf) {
|
||||
if (strlen($arg) && !isset($inf['val']) && isset($inf['required']) && $inf['required']) {
|
||||
$missing .= "Missing parameter '-$arg' to command $command, check ${argv[0]} help\n";
|
||||
}
|
||||
}
|
||||
if (strlen($missing))
|
||||
{
|
||||
self::error($missing);
|
||||
}
|
||||
}
|
||||
|
||||
call_user_func(array($this, $this->cmds[$command]['run']), $this->args);
|
||||
}
|
||||
|
||||
static function notice ($msg)
|
||||
{
|
||||
fprintf(STDERR, $msg);
|
||||
}
|
||||
|
||||
static function error ($msg, $exit_code = 1)
|
||||
{
|
||||
self::notice($msg);
|
||||
exit($exit_code);
|
||||
}
|
||||
|
||||
function checkArgTyp($arg, $i, $argc, $argv)
|
||||
{
|
||||
$typ = $this->args[$arg]['typ'];
|
||||
|
||||
if (isset($this->typs[$typ]['typ'])) {
|
||||
return call_user_func(array($this, $this->typs[$typ]['typ']), $argv[$i], $this->args[$arg], $arg);
|
||||
} else {
|
||||
return $argv[$i];
|
||||
}
|
||||
}
|
||||
|
||||
static function getSubFuncs(CLICommand $cmdclass, $prefix, array $subs)
|
||||
{
|
||||
$a = array();
|
||||
$r = new ReflectionClass($cmdclass);
|
||||
$l = strlen($prefix);
|
||||
|
||||
foreach($r->getMethods() as $m)
|
||||
{
|
||||
if (substr($m->name, 0, $l) == $prefix)
|
||||
{
|
||||
foreach($subs as $sub)
|
||||
{
|
||||
$what = substr($m->name, $l+strlen($sub)+1);
|
||||
$func = $prefix . $sub . '_' . $what;
|
||||
$what = str_replace('_', '-', $what);
|
||||
if ($r->hasMethod($func))
|
||||
{
|
||||
if (!isset($a[$what]))
|
||||
{
|
||||
$a[$what] = array();
|
||||
}
|
||||
$a[$what][$sub] = /*$m->class . '::' .*/ $func;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return $a;
|
||||
}
|
||||
|
||||
static function getCommands(CLICommand $cmdclass)
|
||||
{
|
||||
return self::getSubFuncs($cmdclass, 'cli_cmd_', array('arg','inf','run'));
|
||||
}
|
||||
|
||||
static function getArgTyps(CLICommand $cmdclass)
|
||||
{
|
||||
return self::getSubFuncs($cmdclass, 'cli_arg_', array('typ'));
|
||||
}
|
||||
|
||||
static function cli_arg_typ_bool($arg, $cfg, $key)
|
||||
{
|
||||
return (bool)$arg;
|
||||
}
|
||||
|
||||
|
||||
static function cli_arg_typ_int($arg, $cfg, $key)
|
||||
{
|
||||
if ((int)$arg != $arg) {
|
||||
self::error("Argument to -$key must be an integer.\n");
|
||||
}
|
||||
|
||||
return (int)$arg;
|
||||
}
|
||||
|
||||
static function cli_arg_typ_regex($arg, $cfg, $key)
|
||||
{
|
||||
if (strlen($arg))
|
||||
{
|
||||
if (strlen($arg) > 1 && $arg[0] == $arg[strlen($arg)-1] && strpos('/,', $arg) !== false)
|
||||
{
|
||||
return $arg;
|
||||
}
|
||||
else
|
||||
{
|
||||
return '/' . $arg . '/';
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
|
||||
static function cli_arg_typ_select($arg, $cfg, $key)
|
||||
{
|
||||
if (!in_array($arg, array_keys($cfg['select']))) {
|
||||
self::error("Parameter value '$arg' not one of '" . join("', '", array_keys($cfg['select'])) . "'.\n");
|
||||
}
|
||||
return $arg;
|
||||
}
|
||||
|
||||
static function cli_arg_typ_dir($arg, $cfg, $key)
|
||||
{
|
||||
$f = realpath($arg);
|
||||
|
||||
if ($f===false || !file_exists($f) || !is_dir($f)) {
|
||||
self::error("Requested path '$arg' does not exist.\n");
|
||||
}
|
||||
return $f;
|
||||
}
|
||||
|
||||
static function cli_arg_typ_file($arg)
|
||||
{
|
||||
$f = new SplFileInfo($arg);
|
||||
$f = $f->getRealPath();
|
||||
if ($f===false || !file_exists($f))
|
||||
{
|
||||
echo "Requested file '$arg' does not exist.\n";
|
||||
exit(1);
|
||||
}
|
||||
return $f;
|
||||
}
|
||||
|
||||
static function cli_arg_typ_filenew($arg, $cfg, $key)
|
||||
{
|
||||
$d = dirname($arg);
|
||||
$f = realpath($d);
|
||||
|
||||
if ($f === false) {
|
||||
self::error("Path for file '$arg' does not exist.\n");
|
||||
}
|
||||
return $f . substr($arg, strlen($d));;
|
||||
}
|
||||
|
||||
static function cli_arg_typ_filecont($arg, $cfg, $key)
|
||||
{
|
||||
return file_get_contents(self::cli_arg_typ_file($arg, $cfg, $key));
|
||||
}
|
||||
|
||||
function cli_get_SP2($l1, $arg_inf)
|
||||
{
|
||||
return str_repeat(' ', $l1 + 2 + 4 + 8);
|
||||
}
|
||||
|
||||
function cli_get_SP3($l1, $l2, $arg_inf)
|
||||
{
|
||||
return str_repeat(' ', $l1 + 2 + 4 + 8 + 2 + $l2 + 2);
|
||||
}
|
||||
|
||||
static function cli_cmd_inf_help()
|
||||
{
|
||||
return "This help or help for a selected command.";
|
||||
}
|
||||
|
||||
private function cli_wordwrap($what, $l, $sp)
|
||||
{
|
||||
$p = max(79 - $l, 40); // minimum length for paragraph
|
||||
$b = substr($what, 0, $l); // strip out initial $l
|
||||
$r = substr($what, $l); // remainder
|
||||
$r = str_replace("\n", "\n".$sp, $r); // in remainder replace \n's
|
||||
return $b . wordwrap($r, $p, "\n".$sp);
|
||||
}
|
||||
|
||||
private function cli_help_get_args($func, $l, $sp, $required)
|
||||
{
|
||||
$inf = "";
|
||||
foreach(call_user_func($func, $l, $sp) as $arg => $conf)
|
||||
{
|
||||
if ((isset($conf['required']) && $conf['required']) != $required)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
if (strlen($arg))
|
||||
{
|
||||
$arg = "-$arg ";
|
||||
}
|
||||
else
|
||||
{
|
||||
$arg = "... ";
|
||||
}
|
||||
$sp2 = $this->cli_get_SP2($l, $inf);
|
||||
$l2 = strlen($sp2);
|
||||
$inf .= $this->cli_wordwrap($sp . $arg . $conf['inf'], $l2, $sp2) . "\n";
|
||||
if (isset($conf['select']) && count($conf['select']))
|
||||
{
|
||||
$ls = 0;
|
||||
foreach($conf['select'] as $opt => $what)
|
||||
{
|
||||
$ls = max($ls, strlen($opt));
|
||||
}
|
||||
$sp3 = $this->cli_get_SP3($l, $ls, $inf);
|
||||
$l3 = strlen($sp3);
|
||||
foreach($conf['select'] as $opt => $what)
|
||||
{
|
||||
$inf .= $this->cli_wordwrap($sp2 . " " . sprintf("%-${ls}s ", $opt) . $what, $l3, $sp3) . "\n";
|
||||
}
|
||||
}
|
||||
}
|
||||
if (strlen($inf))
|
||||
{
|
||||
if ($required)
|
||||
{
|
||||
return $sp . "Required arguments:\n\n" . $inf;
|
||||
}
|
||||
else
|
||||
{
|
||||
return $sp . "Optional arguments:\n\n". $inf;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function cli_cmd_arg_help()
|
||||
{
|
||||
return array('' => array('typ'=>'any','val'=>NULL,'inf'=>'Optional command to retrieve help for.'));
|
||||
}
|
||||
|
||||
function cli_cmd_run_help()
|
||||
{
|
||||
$argv = $this->argv;
|
||||
$which = $this->args['']['val'];
|
||||
if (isset($which))
|
||||
{
|
||||
if (count($which) != 1) {
|
||||
self::error("More than one command given.\n");
|
||||
}
|
||||
|
||||
$which = $which[0];
|
||||
if (!array_key_exists($which, $this->cmds)) {
|
||||
self::error("Unknown command, cannot retrieve help.\n");
|
||||
}
|
||||
|
||||
$l = strlen($which);
|
||||
$cmds = array($which => $this->cmds[$which]);
|
||||
} else {
|
||||
echo "\n$argv[0] <command> [options]\n\n";
|
||||
$l = 0;
|
||||
ksort($this->cmds);
|
||||
foreach($this->cmds as $name => $funcs) {
|
||||
$l = max($l, strlen($name));
|
||||
}
|
||||
$inf = "Commands:";
|
||||
$lst = "";
|
||||
$ind = strlen($inf) + 1;
|
||||
foreach($this->cmds as $name => $funcs)
|
||||
{
|
||||
$lst .= ' ' . $name;
|
||||
}
|
||||
echo $this->cli_wordwrap($inf.$lst, $ind, str_repeat(' ', $ind)) . "\n\n";
|
||||
$cmds = $this->cmds;
|
||||
}
|
||||
$sp = str_repeat(' ', $l + 2);
|
||||
foreach($cmds as $name => $funcs)
|
||||
{
|
||||
$inf = $name . substr($sp, strlen($name));
|
||||
if (isset($funcs['inf']))
|
||||
{
|
||||
$inf .= $this->cli_wordwrap(call_user_func(array($this, $funcs['inf'])), $l, $sp) . "\n";
|
||||
if (isset($funcs['arg']))
|
||||
{
|
||||
$inf .= "\n";
|
||||
$inf .= $this->cli_help_get_args(array($this, $funcs['arg']), $l, $sp, true);
|
||||
$inf .= "\n";
|
||||
$inf .= $this->cli_help_get_args(array($this, $funcs['arg']), $l, $sp, false);
|
||||
}
|
||||
}
|
||||
echo "$inf\n\n";
|
||||
}
|
||||
exit(0);
|
||||
}
|
||||
|
||||
static function cli_cmd_inf_help_list()
|
||||
{
|
||||
return "Lists available commands.";
|
||||
}
|
||||
|
||||
function cli_cmd_run_help_list()
|
||||
{
|
||||
ksort($this->cmds);
|
||||
$lst = '';
|
||||
foreach($this->cmds as $name => $funcs) {
|
||||
$lst .= $name . ' ';
|
||||
}
|
||||
echo substr($lst, 0, -1) . "\n";
|
||||
}
|
||||
}
|
||||
|
||||
?>
|
||||
@@ -1,34 +0,0 @@
|
||||
<?php
|
||||
|
||||
/** @file directorygraphiterator.inc
|
||||
* @ingroup Examples
|
||||
* @brief class DirectoryGraphIterator
|
||||
* @author Marcus Boerger
|
||||
* @date 2003 - 2005
|
||||
*
|
||||
* SPL - Standard PHP Library
|
||||
*/
|
||||
|
||||
/** @ingroup Examples
|
||||
* @brief A tree iterator that only shows directories.
|
||||
* @author Marcus Boerger
|
||||
* @version 1.1
|
||||
*/
|
||||
class DirectoryGraphIterator extends DirectoryTreeIterator
|
||||
{
|
||||
function __construct($path)
|
||||
{
|
||||
RecursiveIteratorIterator::__construct(
|
||||
new RecursiveCachingIterator(
|
||||
new ParentIterator(
|
||||
new RecursiveDirectoryIterator($path, RecursiveDirectoryIterator::KEY_AS_FILENAME
|
||||
)
|
||||
),
|
||||
CachingIterator::CALL_TOSTRING|CachingIterator::CATCH_GET_CHILD
|
||||
),
|
||||
parent::SELF_FIRST
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
?>
|
||||
@@ -1,54 +0,0 @@
|
||||
<?php
|
||||
|
||||
/** @file directorytreeiterator.inc
|
||||
* @ingroup Examples
|
||||
* @brief class DirectoryTreeIterator
|
||||
* @author Marcus Boerger
|
||||
* @date 2003 - 2005
|
||||
*
|
||||
* SPL - Standard PHP Library
|
||||
*/
|
||||
|
||||
/** @ingroup Examples
|
||||
* @brief DirectoryIterator to generate ASCII graphic directory trees
|
||||
* @author Marcus Boerger
|
||||
* @version 1.1
|
||||
*/
|
||||
class DirectoryTreeIterator extends RecursiveIteratorIterator
|
||||
{
|
||||
/** Construct from a path.
|
||||
* @param $path directory to iterate
|
||||
*/
|
||||
function __construct($path)
|
||||
{
|
||||
parent::__construct(
|
||||
new RecursiveCachingIterator(
|
||||
new RecursiveDirectoryIterator($path, RecursiveDirectoryIterator::KEY_AS_FILENAME
|
||||
),
|
||||
CachingIterator::CALL_TOSTRING|CachingIterator::CATCH_GET_CHILD
|
||||
),
|
||||
parent::SELF_FIRST
|
||||
);
|
||||
}
|
||||
|
||||
/** @return the current element prefixed with ASCII graphics
|
||||
*/
|
||||
function current()
|
||||
{
|
||||
$tree = '';
|
||||
for ($l=0; $l < $this->getDepth(); $l++) {
|
||||
$tree .= $this->getSubIterator($l)->hasNext() ? '| ' : ' ';
|
||||
}
|
||||
return $tree . ($this->getSubIterator($l)->hasNext() ? '|-' : '\-')
|
||||
. $this->getSubIterator($l)->__toString();
|
||||
}
|
||||
|
||||
/** Aggregates the inner iterator
|
||||
*/
|
||||
function __call($func, $params)
|
||||
{
|
||||
return call_user_func_array(array($this->getSubIterator(), $func), $params);
|
||||
}
|
||||
}
|
||||
|
||||
?>
|
||||
@@ -1,27 +0,0 @@
|
||||
<?php
|
||||
|
||||
/** @file invertedregexiterator.inc
|
||||
* @ingroup Phar
|
||||
* @brief class InvertedRegexIterator
|
||||
* @author Marcus Boerger
|
||||
* @date 2007 - 2007
|
||||
*
|
||||
* Inverted RegexIterator
|
||||
*/
|
||||
|
||||
/** @ingroup Phar
|
||||
* @brief Inverted RegexIterator
|
||||
* @author Marcus Boerger
|
||||
* @version 1.0
|
||||
*/
|
||||
class InvertedRegexIterator extends RegexIterator
|
||||
{
|
||||
/** @return !RegexIterator::accept()
|
||||
*/
|
||||
function accept()
|
||||
{
|
||||
return !RegexIterator::accept();
|
||||
}
|
||||
}
|
||||
|
||||
?>
|
||||
@@ -1,80 +0,0 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @file phar.inc
|
||||
* @ingroup Phar
|
||||
* @brief class Phar
|
||||
* @author Marcus Boerger
|
||||
* @date 2007 - 2007
|
||||
*
|
||||
* Phar Command
|
||||
*/
|
||||
// {{{ class Phar extends PHP_Archive
|
||||
/**
|
||||
* Phar class
|
||||
*
|
||||
* @ingroup Phar
|
||||
* @brief Phar implementation
|
||||
* @author Marcus Boerger
|
||||
* @version 1.0
|
||||
*/
|
||||
class Phar extends PHP_Archive implements RecursiveIterator
|
||||
{
|
||||
function getSignature()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
function getAlias()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
function rewind()
|
||||
{
|
||||
}
|
||||
|
||||
function valid()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
function current()
|
||||
{
|
||||
}
|
||||
|
||||
function key()
|
||||
{
|
||||
}
|
||||
|
||||
function next()
|
||||
{
|
||||
}
|
||||
|
||||
function hasChildren()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
function getChildren()
|
||||
{
|
||||
}
|
||||
|
||||
function hasMetadata()
|
||||
{
|
||||
}
|
||||
|
||||
function getMetadata()
|
||||
{
|
||||
}
|
||||
|
||||
function getStub()
|
||||
{
|
||||
}
|
||||
|
||||
function setStub()
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
?>
|
||||
@@ -1,57 +0,0 @@
|
||||
#!/usr/bin/php
|
||||
<?php
|
||||
|
||||
/** @file phar.php
|
||||
* @ingroup Phar
|
||||
* @brief class CLICommand
|
||||
* @author Marcus Boerger
|
||||
* @date 2007 - 2007
|
||||
*
|
||||
* Phar Command
|
||||
*/
|
||||
|
||||
if (!extension_loaded('phar'))
|
||||
{
|
||||
if (!class_exists('PHP_Archive', 0))
|
||||
{
|
||||
echo "Neither Extension Phar nor class PHP_Archive are available.\n";
|
||||
exit(1);
|
||||
}
|
||||
if (!in_array('phar', stream_get_wrappers()))
|
||||
{
|
||||
stream_wrapper_register('phar', 'PHP_Archive');
|
||||
}
|
||||
if (!class_exists('Phar',0)) {
|
||||
require 'phar://'.__FILE__.'/phar.inc';
|
||||
}
|
||||
}
|
||||
|
||||
foreach(array("SPL", "Reflection") as $ext)
|
||||
{
|
||||
if (!extension_loaded($ext))
|
||||
{
|
||||
echo "$argv[0] requires PHP extension $ext.\n";
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
function command_include($file)
|
||||
{
|
||||
$file = 'phar://' . __FILE__ . '/' . $file;
|
||||
if (file_exists($file)) {
|
||||
include($file);
|
||||
}
|
||||
}
|
||||
|
||||
function command_autoload($classname)
|
||||
{
|
||||
command_include(strtolower($classname) . '.inc');
|
||||
}
|
||||
|
||||
Phar::mapPhar();
|
||||
|
||||
spl_autoload_register('command_autoload');
|
||||
|
||||
new PharCommand($argc, $argv);
|
||||
|
||||
__HALT_COMPILER(); ?>
|
||||
File diff suppressed because it is too large.
Load diff
@@ -1,297 +0,0 @@
|
||||
/*
|
||||
+----------------------------------------------------------------------+
|
||||
| phar php single-file executable PHP extension |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 2006-2007 The PHP Group |
|
||||
+----------------------------------------------------------------------+
|
||||
| This source file is subject to version 3.01 of the PHP license, |
|
||||
| that is bundled with this package in the file LICENSE, and is |
|
||||
| available through the world-wide-web at the following url: |
|
||||
| http://www.php.net/license/3_01.txt. |
|
||||
| If you did not receive a copy of the PHP license and are unable to |
|
||||
| obtain it through the world-wide-web, please send a note to |
|
||||
| license@php.net so we can mail you a copy immediately. |
|
||||
+----------------------------------------------------------------------+
|
||||
| Authors: Gregory Beaver <cellog@php.net> |
|
||||
| Marcus Boerger <helly@php.net> |
|
||||
+----------------------------------------------------------------------+
|
||||
*/
|
||||
|
||||
/* $Id$ */
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
#endif
|
||||
|
||||
#include <time.h>
|
||||
#include "php.h"
|
||||
#include "php_ini.h"
|
||||
#include "zend_constants.h"
|
||||
#include "zend_execute.h"
|
||||
#include "zend_exceptions.h"
|
||||
#include "zend_hash.h"
|
||||
#include "zend_interfaces.h"
|
||||
#include "zend_operators.h"
|
||||
#include "zend_qsort.h"
|
||||
#include "main/php_streams.h"
|
||||
#include "ext/standard/info.h"
|
||||
#include "ext/standard/basic_functions.h"
|
||||
#include "ext/standard/url.h"
|
||||
#include "ext/standard/crc32.h"
|
||||
#include "ext/standard/md5.h"
|
||||
#include "ext/standard/sha1.h"
|
||||
#include "ext/standard/php_var.h"
|
||||
#include "ext/standard/php_smart_str.h"
|
||||
#if HAVE_SPL
|
||||
#include "ext/spl/spl_array.h"
|
||||
#include "ext/spl/spl_directory.h"
|
||||
#include "ext/spl/spl_engine.h"
|
||||
#include "ext/spl/spl_exceptions.h"
|
||||
#include "ext/spl/spl_iterators.h"
|
||||
#endif
|
||||
#include "php_phar.h"
|
||||
#ifdef HAVE_STDINT_H
|
||||
#include <stdint.h>
|
||||
#endif
|
||||
#if HAVE_HASH_EXT
|
||||
#include "ext/hash/php_hash.h"
|
||||
#include "ext/hash/php_hash_sha.h"
|
||||
#endif
|
||||
|
||||
#ifndef E_RECOVERABLE_ERROR
|
||||
#define E_RECOVERABLE_ERROR E_ERROR
|
||||
#endif
|
||||
|
||||
#define PHAR_EXT_VERSION_STR "1.2.1"
|
||||
#define PHAR_API_VERSION_STR "1.1.0"
|
||||
/* x.y.z maps to 0xyz0 */
|
||||
#define PHAR_API_VERSION 0x1100
|
||||
#define PHAR_API_MIN_READ 0x1000
|
||||
#define PHAR_API_MAJORVERSION 0x1000
|
||||
#define PHAR_API_MAJORVER_MASK 0xF000
|
||||
#define PHAR_API_VER_MASK 0xFFF0
|
||||
|
||||
#define PHAR_HDR_COMPRESSION_MASK 0x0000F000
|
||||
#define PHAR_HDR_COMPRESSED_NONE 0x00000000
|
||||
#define PHAR_HDR_COMPRESSED_GZ 0x00001000
|
||||
#define PHAR_HDR_COMPRESSED_BZ2 0x00002000
|
||||
#define PHAR_HDR_SIGNATURE 0x00010000
|
||||
|
||||
#define PHAR_SIG_MD5 0x0001
|
||||
#define PHAR_SIG_SHA1 0x0002
|
||||
#define PHAR_SIG_SHA256 0x0003
|
||||
#define PHAR_SIG_SHA512 0x0004
|
||||
#define PHAR_SIG_PGP 0x0010
|
||||
|
||||
/* flags byte for each file adheres to these bitmasks.
|
||||
All unused values are reserved */
|
||||
#define PHAR_ENT_COMPRESSION_MASK 0x0000F000
|
||||
#define PHAR_ENT_COMPRESSED_NONE 0x00000000
|
||||
#define PHAR_ENT_COMPRESSED_GZ 0x00001000
|
||||
#define PHAR_ENT_COMPRESSED_BZ2 0x00002000
|
||||
|
||||
#define PHAR_ENT_PERM_MASK 0x000001FF
|
||||
#define PHAR_ENT_PERM_MASK_USR 0x000001C0
|
||||
#define PHAR_ENT_PERM_SHIFT_USR 6
|
||||
#define PHAR_ENT_PERM_MASK_GRP 0x00000038
|
||||
#define PHAR_ENT_PERM_SHIFT_GRP 3
|
||||
#define PHAR_ENT_PERM_MASK_OTH 0x00000007
|
||||
#define PHAR_ENT_PERM_DEF_FILE 0x000001B6
|
||||
#define PHAR_ENT_PERM_DEF_DIR 0x000001FF
|
||||
|
||||
ZEND_BEGIN_MODULE_GLOBALS(phar)
|
||||
HashTable phar_fname_map;
|
||||
HashTable phar_alias_map;
|
||||
HashTable phar_plain_map;
|
||||
char* extract_list;
|
||||
int readonly;
|
||||
zend_bool readonly_orig;
|
||||
zend_bool require_hash_orig;
|
||||
int request_init;
|
||||
int require_hash;
|
||||
int request_done;
|
||||
int request_ends;
|
||||
ZEND_END_MODULE_GLOBALS(phar)
|
||||
|
||||
ZEND_EXTERN_MODULE_GLOBALS(phar)
|
||||
|
||||
#ifdef ZTS
|
||||
# include "TSRM.h"
|
||||
# define PHAR_G(v) TSRMG(phar_globals_id, zend_phar_globals *, v)
|
||||
# define PHAR_GLOBALS ((zend_phar_globals *) (*((void ***) tsrm_ls))[TSRM_UNSHUFFLE_RSRC_ID(phar_globals_id)])
|
||||
#else
|
||||
# define PHAR_G(v) (phar_globals.v)
|
||||
# define PHAR_GLOBALS (&phar_globals)
|
||||
#endif
|
||||
|
||||
#ifndef php_uint16
|
||||
# if SIZEOF_SHORT == 2
|
||||
# define php_uint16 unsigned short
|
||||
# else
|
||||
# define php_uint16 uint16_t
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#if HAVE_SPL
|
||||
typedef union _phar_archive_object phar_archive_object;
|
||||
typedef union _phar_entry_object phar_entry_object;
|
||||
#endif
|
||||
|
||||
typedef struct _phar_archive_data phar_archive_data;
|
||||
/* entry for one file in a phar file */
|
||||
typedef struct _phar_entry_info {
|
||||
/* first bytes are exactly as in file */
|
||||
php_uint32 uncompressed_filesize;
|
||||
php_uint32 timestamp;
|
||||
php_uint32 compressed_filesize;
|
||||
php_uint32 crc32;
|
||||
php_uint32 flags;
|
||||
/* remainder */
|
||||
zval *metadata;
|
||||
php_uint32 filename_len;
|
||||
char *filename;
|
||||
long offset_within_phar;
|
||||
php_stream *fp;
|
||||
php_stream *cfp;
|
||||
int fp_refcount;
|
||||
int is_crc_checked:1;
|
||||
int is_modified:1;
|
||||
int is_deleted:1;
|
||||
phar_archive_data *phar;
|
||||
smart_str metadata_str;
|
||||
} phar_entry_info;
|
||||
|
||||
/* information about a phar file (the archive itself) */
|
||||
struct _phar_archive_data {
|
||||
char *fname;
|
||||
int fname_len;
|
||||
char *alias;
|
||||
int alias_len;
|
||||
char version[12];
|
||||
size_t internal_file_start;
|
||||
size_t halt_offset;
|
||||
HashTable manifest;
|
||||
php_uint32 flags;
|
||||
php_uint32 min_timestamp;
|
||||
php_uint32 max_timestamp;
|
||||
php_stream *fp;
|
||||
int refcount;
|
||||
php_uint32 sig_flags;
|
||||
int sig_len;
|
||||
char *signature;
|
||||
zval *metadata;
|
||||
int is_explicit_alias:1;
|
||||
int is_modified:1;
|
||||
int is_writeable:1;
|
||||
int is_brandnew:1;
|
||||
/* defer phar creation */
|
||||
int donotflush:1;
|
||||
};
|
||||
|
||||
|
||||
/* stream access data for one file entry in a phar file */
|
||||
typedef struct _phar_entry_data {
|
||||
phar_archive_data *phar;
|
||||
/* stream position proxy, allows multiple open streams referring to the same fp */
|
||||
php_stream *fp;
|
||||
off_t position;
|
||||
phar_entry_info *internal_file;
|
||||
} phar_entry_data;
|
||||
|
||||
#if HAVE_SPL
|
||||
/* archive php object */
|
||||
union _phar_archive_object {
|
||||
zend_object std;
|
||||
spl_filesystem_object spl;
|
||||
struct {
|
||||
zend_object std;
|
||||
phar_archive_data *archive;
|
||||
} arc;
|
||||
};
|
||||
#endif
|
||||
|
||||
#if HAVE_SPL
|
||||
/* entry php object */
|
||||
union _phar_entry_object {
|
||||
zend_object std;
|
||||
spl_filesystem_object spl;
|
||||
struct {
|
||||
zend_object std;
|
||||
phar_entry_info *entry;
|
||||
} ent;
|
||||
};
|
||||
#endif
|
||||
|
||||
BEGIN_EXTERN_C()
|
||||
|
||||
void phar_request_initialize(TSRMLS_D);
|
||||
|
||||
void phar_object_init(TSRMLS_D);
|
||||
|
||||
int phar_open_filename(char *fname, int fname_len, char *alias, int alias_len, int options, phar_archive_data** pphar, char **error TSRMLS_DC);
|
||||
int phar_open_or_create_filename(char *fname, int fname_len, char *alias, int alias_len, int options, phar_archive_data** pphar, char **error TSRMLS_DC);
|
||||
int phar_open_compiled_file(char *alias, int alias_len, char **error TSRMLS_DC);
|
||||
|
||||
#ifdef PHAR_MAIN
|
||||
|
||||
static int phar_open_fp(php_stream* fp, char *fname, int fname_len, char *alias, int alias_len, int options, phar_archive_data** pphar, char **error TSRMLS_DC);
|
||||
|
||||
static php_url* phar_open_url(php_stream_wrapper *wrapper, char *filename, char *mode, int options TSRMLS_DC);
|
||||
|
||||
static php_stream* phar_wrapper_open_url(php_stream_wrapper *wrapper, char *path, char *mode, int options, char **opened_path, php_stream_context *context STREAMS_DC TSRMLS_DC);
|
||||
static php_stream* phar_wrapper_open_dir(php_stream_wrapper *wrapper, char *path, char *mode, int options, char **opened_path, php_stream_context *context STREAMS_DC TSRMLS_DC);
|
||||
static int phar_wrapper_rename(php_stream_wrapper *wrapper, char *url_from, char *url_to, int options, php_stream_context *context TSRMLS_DC);
|
||||
static int phar_wrapper_unlink(php_stream_wrapper *wrapper, char *url, int options, php_stream_context *context TSRMLS_DC);
|
||||
static int phar_wrapper_stat(php_stream_wrapper *wrapper, char *url, int flags, php_stream_statbuf *ssb, php_stream_context *context TSRMLS_DC);
|
||||
|
||||
/* file/stream handlers */
|
||||
static size_t phar_stream_write(php_stream *stream, const char *buf, size_t count TSRMLS_DC);
|
||||
static size_t phar_stream_read( php_stream *stream, char *buf, size_t count TSRMLS_DC);
|
||||
static int phar_stream_close(php_stream *stream, int close_handle TSRMLS_DC);
|
||||
static int phar_stream_flush(php_stream *stream TSRMLS_DC);
|
||||
static int phar_stream_seek( php_stream *stream, off_t offset, int whence, off_t *newoffset TSRMLS_DC);
|
||||
static int phar_stream_stat( php_stream *stream, php_stream_statbuf *ssb TSRMLS_DC);
|
||||
|
||||
/* directory handlers */
|
||||
static size_t phar_dir_write(php_stream *stream, const char *buf, size_t count TSRMLS_DC);
|
||||
static size_t phar_dir_read( php_stream *stream, char *buf, size_t count TSRMLS_DC);
|
||||
static int phar_dir_close(php_stream *stream, int close_handle TSRMLS_DC);
|
||||
static int phar_dir_flush(php_stream *stream TSRMLS_DC);
|
||||
static int phar_dir_seek( php_stream *stream, off_t offset, int whence, off_t *newoffset TSRMLS_DC);
|
||||
static int phar_dir_stat( php_stream *stream, php_stream_statbuf *ssb TSRMLS_DC);
|
||||
|
||||
#endif
|
||||
|
||||
int phar_archive_delref(phar_archive_data *phar TSRMLS_DC);
|
||||
int phar_entry_delref(phar_entry_data *idata TSRMLS_DC);
|
||||
|
||||
phar_entry_info *phar_get_entry_info(phar_archive_data *phar, char *path, int path_len, char **error TSRMLS_DC);
|
||||
phar_entry_data *phar_get_or_create_entry_data(char *fname, int fname_len, char *path, int path_len, char *mode, char **error TSRMLS_DC);
|
||||
int phar_flush(phar_archive_data *archive, char *user_stub, long len, char **error TSRMLS_DC);
|
||||
int phar_detect_phar_fname_ext(const char *filename, int check_length, char **ext_str, int *ext_len);
|
||||
int phar_split_fname(char *filename, int filename_len, char **arch, int *arch_len, char **entry, int *entry_len TSRMLS_DC);
|
||||
|
||||
typedef enum {
|
||||
pcr_use_query,
|
||||
pcr_is_ok,
|
||||
pcr_err_double_slash,
|
||||
pcr_err_up_dir,
|
||||
pcr_err_curr_dir,
|
||||
pcr_err_back_slash,
|
||||
pcr_err_star,
|
||||
pcr_err_illegal_char,
|
||||
pcr_err_empty_entry
|
||||
} phar_path_check_result;
|
||||
|
||||
phar_path_check_result phar_path_check(char **p, int *len, const char **error);
|
||||
|
||||
END_EXTERN_C()
|
||||
|
||||
/*
|
||||
* Local variables:
|
||||
* tab-width: 4
|
||||
* c-basic-offset: 4
|
||||
* End:
|
||||
* vim600: noet sw=4 ts=4 fdm=marker
|
||||
* vim<600: noet sw=4 ts=4
|
||||
*/
|
||||
File diff suppressed because it is too large.
Load diff
@@ -1,196 +0,0 @@
|
||||
/* Generated by re2c 0.10.5 on Thu Feb 8 23:49:41 2007 */
|
||||
#line 1 "ext/phar/phar_path_check.re"
|
||||
/*
|
||||
+----------------------------------------------------------------------+
|
||||
| phar php single-file executable PHP extension |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 2007 The PHP Group |
|
||||
+----------------------------------------------------------------------+
|
||||
| This source file is subject to version 3.01 of the PHP license, |
|
||||
| that is bundled with this package in the file LICENSE, and is |
|
||||
| available through the world-wide-web at the following url: |
|
||||
| http://www.php.net/license/3_01.txt. |
|
||||
| If you did not receive a copy of the PHP license and are unable to |
|
||||
| obtain it through the world-wide-web, please send a note to |
|
||||
| license@php.net so we can mail you a copy immediately. |
|
||||
+----------------------------------------------------------------------+
|
||||
| Authors: Marcus Boerger <helly@php.net> |
|
||||
+----------------------------------------------------------------------+
|
||||
*/
|
||||
|
||||
/* $Id$ */
|
||||
|
||||
#include "phar_internal.h"
|
||||
|
||||
phar_path_check_result phar_path_check(char **s, int *len, const char **error)
|
||||
{
|
||||
const unsigned char *p = (const unsigned char*)*s;
|
||||
const unsigned char *m;
|
||||
|
||||
if (*len == 1 && *p == '.') {
|
||||
*error = "current directory reference";
|
||||
return pcr_err_curr_dir;
|
||||
} else if (*len == 2 && p[0] == '.' && p[1] == '.') {
|
||||
*error = "upper directory reference";
|
||||
return pcr_err_up_dir;
|
||||
}
|
||||
|
||||
#define YYCTYPE unsigned char
|
||||
#define YYCURSOR p
|
||||
#define YYLIMIT p+*len
|
||||
#define YYMARKER m
|
||||
#define YYFILL(n)
|
||||
|
||||
loop:
|
||||
{
|
||||
|
||||
#line 48 "ext/phar/phar_path_check.c"
|
||||
{
|
||||
YYCTYPE yych;
|
||||
|
||||
if((YYLIMIT - YYCURSOR) < 4) YYFILL(4);
|
||||
yych = *YYCURSOR;
|
||||
if(yych <= '.') {
|
||||
if(yych <= 0x0A) {
|
||||
if(yych <= 0x00) goto yy13;
|
||||
if(yych <= 0x09) goto yy10;
|
||||
goto yy12;
|
||||
} else {
|
||||
if(yych <= 0x19) goto yy10;
|
||||
if(yych == '*') goto yy6;
|
||||
goto yy15;
|
||||
}
|
||||
} else {
|
||||
if(yych <= '?') {
|
||||
if(yych <= '/') goto yy2;
|
||||
if(yych <= '>') goto yy15;
|
||||
goto yy8;
|
||||
} else {
|
||||
if(yych == '\\') goto yy4;
|
||||
if(yych <= 0x7F) goto yy15;
|
||||
goto yy10;
|
||||
}
|
||||
}
|
||||
yy2:
|
||||
yych = *(YYMARKER = ++YYCURSOR);
|
||||
if(yych <= 0x00) goto yy16;
|
||||
if(yych <= '-') goto yy3;
|
||||
if(yych <= '.') goto yy18;
|
||||
if(yych <= '/') goto yy20;
|
||||
yy3:
|
||||
#line 97 "ext/phar/phar_path_check.re"
|
||||
{
|
||||
goto loop;
|
||||
}
|
||||
#line 86 "ext/phar/phar_path_check.c"
|
||||
yy4:
|
||||
++YYCURSOR;
|
||||
#line 60 "ext/phar/phar_path_check.re"
|
||||
{
|
||||
*error = "back-slash";
|
||||
return pcr_err_back_slash;
|
||||
}
|
||||
#line 94 "ext/phar/phar_path_check.c"
|
||||
yy6:
|
||||
++YYCURSOR;
|
||||
#line 68 "ext/phar/phar_path_check.re"
|
||||
{
|
||||
*error = "star";
|
||||
return pcr_err_star;
|
||||
}
|
||||
#line 102 "ext/phar/phar_path_check.c"
|
||||
yy8:
|
||||
++YYCURSOR;
|
||||
#line 72 "ext/phar/phar_path_check.re"
|
||||
{
|
||||
if (**s == '/') {
|
||||
(*s)++;
|
||||
}
|
||||
*len = (p - (const unsigned char*)*s) -1;
|
||||
*error = NULL;
|
||||
return pcr_use_query;
|
||||
}
|
||||
#line 114 "ext/phar/phar_path_check.c"
|
||||
yy10:
|
||||
++YYCURSOR;
|
||||
yy11:
|
||||
#line 80 "ext/phar/phar_path_check.re"
|
||||
{
|
||||
*error ="illegal character";
|
||||
return pcr_err_illegal_char;
|
||||
}
|
||||
#line 123 "ext/phar/phar_path_check.c"
|
||||
yy12:
|
||||
yych = *++YYCURSOR;
|
||||
goto yy11;
|
||||
yy13:
|
||||
++YYCURSOR;
|
||||
#line 84 "ext/phar/phar_path_check.re"
|
||||
{
|
||||
if (**s == '/') {
|
||||
(*s)++;
|
||||
(*len)--;
|
||||
}
|
||||
if ((p - (const unsigned char*)*s) - 1 != *len)
|
||||
{
|
||||
*error ="illegal character";
|
||||
return pcr_err_illegal_char;
|
||||
}
|
||||
*error = NULL;
|
||||
return pcr_is_ok;
|
||||
}
|
||||
#line 143 "ext/phar/phar_path_check.c"
|
||||
yy15:
|
||||
yych = *++YYCURSOR;
|
||||
goto yy3;
|
||||
yy16:
|
||||
++YYCURSOR;
|
||||
#line 64 "ext/phar/phar_path_check.re"
|
||||
{
|
||||
*error = "empty directory";
|
||||
return pcr_err_empty_entry;
|
||||
}
|
||||
#line 154 "ext/phar/phar_path_check.c"
|
||||
yy18:
|
||||
yych = *++YYCURSOR;
|
||||
if(yych <= 0x00) goto yy23;
|
||||
if(yych <= '-') goto yy19;
|
||||
if(yych <= '.') goto yy22;
|
||||
if(yych <= '/') goto yy23;
|
||||
yy19:
|
||||
YYCURSOR = YYMARKER;
|
||||
goto yy3;
|
||||
yy20:
|
||||
++YYCURSOR;
|
||||
#line 48 "ext/phar/phar_path_check.re"
|
||||
{
|
||||
*error = "double slash";
|
||||
return pcr_err_double_slash;
|
||||
}
|
||||
#line 171 "ext/phar/phar_path_check.c"
|
||||
yy22:
|
||||
yych = *++YYCURSOR;
|
||||
if(yych <= 0x00) goto yy25;
|
||||
if(yych == '/') goto yy25;
|
||||
goto yy19;
|
||||
yy23:
|
||||
++YYCURSOR;
|
||||
#line 56 "ext/phar/phar_path_check.re"
|
||||
{
|
||||
*error = "current directory reference";
|
||||
return pcr_err_curr_dir;
|
||||
}
|
||||
#line 184 "ext/phar/phar_path_check.c"
|
||||
yy25:
|
||||
++YYCURSOR;
|
||||
#line 52 "ext/phar/phar_path_check.re"
|
||||
{
|
||||
*error = "upper directory reference";
|
||||
return pcr_err_up_dir;
|
||||
}
|
||||
#line 192 "ext/phar/phar_path_check.c"
|
||||
}
|
||||
}
|
||||
#line 100 "ext/phar/phar_path_check.re"
|
||||
|
||||
}
|
||||
@@ -1,101 +0,0 @@
|
||||
/*
|
||||
+----------------------------------------------------------------------+
|
||||
| phar php single-file executable PHP extension |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 2007 The PHP Group |
|
||||
+----------------------------------------------------------------------+
|
||||
| This source file is subject to version 3.01 of the PHP license, |
|
||||
| that is bundled with this package in the file LICENSE, and is |
|
||||
| available through the world-wide-web at the following url: |
|
||||
| http://www.php.net/license/3_01.txt. |
|
||||
| If you did not receive a copy of the PHP license and are unable to |
|
||||
| obtain it through the world-wide-web, please send a note to |
|
||||
| license@php.net so we can mail you a copy immediately. |
|
||||
+----------------------------------------------------------------------+
|
||||
| Authors: Marcus Boerger <helly@php.net> |
|
||||
+----------------------------------------------------------------------+
|
||||
*/
|
||||
|
||||
/* $Id$ */
|
||||
|
||||
#include "phar_internal.h"
|
||||
|
||||
phar_path_check_result phar_path_check(char **s, int *len, const char **error)
|
||||
{
|
||||
const unsigned char *p = (const unsigned char*)*s;
|
||||
const unsigned char *m;
|
||||
|
||||
if (*len == 1 && *p == '.') {
|
||||
*error = "current directory reference";
|
||||
return pcr_err_curr_dir;
|
||||
} else if (*len == 2 && p[0] == '.' && p[1] == '.') {
|
||||
*error = "upper directory reference";
|
||||
return pcr_err_up_dir;
|
||||
}
|
||||
|
||||
#define YYCTYPE unsigned char
|
||||
#define YYCURSOR p
|
||||
#define YYLIMIT p+*len
|
||||
#define YYMARKER m
|
||||
#define YYFILL(n)
|
||||
|
||||
loop:
|
||||
/*!re2c
|
||||
END = "\x00";
|
||||
ILL = [\x01-\x19\x80-\xFF];
|
||||
EOS = "/" | END;
|
||||
ANY = .;
|
||||
"//" {
|
||||
*error = "double slash";
|
||||
return pcr_err_double_slash;
|
||||
}
|
||||
"/.." EOS {
|
||||
*error = "upper directory reference";
|
||||
return pcr_err_up_dir;
|
||||
}
|
||||
"/." EOS {
|
||||
*error = "current directory reference";
|
||||
return pcr_err_curr_dir;
|
||||
}
|
||||
"\\" {
|
||||
*error = "back-slash";
|
||||
return pcr_err_back_slash;
|
||||
}
|
||||
"/" END {
|
||||
*error = "empty directory";
|
||||
return pcr_err_empty_entry;
|
||||
}
|
||||
"*" {
|
||||
*error = "star";
|
||||
return pcr_err_star;
|
||||
}
|
||||
"?" {
|
||||
if (**s == '/') {
|
||||
(*s)++;
|
||||
}
|
||||
*len = (p - (const unsigned char*)*s) -1;
|
||||
*error = NULL;
|
||||
return pcr_use_query;
|
||||
}
|
||||
ILL {
|
||||
*error ="illegal character";
|
||||
return pcr_err_illegal_char;
|
||||
}
|
||||
END {
|
||||
if (**s == '/') {
|
||||
(*s)++;
|
||||
(*len)--;
|
||||
}
|
||||
if ((p - (const unsigned char*)*s) - 1 != *len)
|
||||
{
|
||||
*error ="illegal character";
|
||||
return pcr_err_illegal_char;
|
||||
}
|
||||
*error = NULL;
|
||||
return pcr_is_ok;
|
||||
}
|
||||
ANY {
|
||||
goto loop;
|
||||
}
|
||||
*/
|
||||
}
|
||||
@@ -1,45 +0,0 @@
|
||||
/*
|
||||
+----------------------------------------------------------------------+
|
||||
| phar php single-file executable PHP extension |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 2005 The PHP Group |
|
||||
+----------------------------------------------------------------------+
|
||||
| This source file is subject to version 3.01 of the PHP license, |
|
||||
| that is bundled with this package in the file LICENSE, and is |
|
||||
| available through the world-wide-web at the following url: |
|
||||
| http://www.php.net/license/3_01.txt. |
|
||||
| If you did not receive a copy of the PHP license and are unable to |
|
||||
| obtain it through the world-wide-web, please send a note to |
|
||||
| license@php.net so we can mail you a copy immediately. |
|
||||
+----------------------------------------------------------------------+
|
||||
| Authors: Gregory Beaver <cellog@php.net> |
|
||||
| Marcus Boerger <helly@php.net> |
|
||||
+----------------------------------------------------------------------+
|
||||
*/
|
||||
|
||||
/* $Id$ */
|
||||
|
||||
#ifndef PHP_PHAR_H
|
||||
#define PHP_PHAR_H
|
||||
|
||||
#include "ext/standard/basic_functions.h"
|
||||
extern zend_module_entry phar_module_entry;
|
||||
#define phpext_phar_ptr &phar_module_entry
|
||||
|
||||
#ifdef PHP_WIN32
|
||||
#define PHP_PHAR_API __declspec(dllexport)
|
||||
#else
|
||||
#define PHP_PHAR_API
|
||||
#endif
|
||||
|
||||
#endif /* PHP_PHAR_H */
|
||||
|
||||
|
||||
/*
|
||||
* Local variables:
|
||||
* tab-width: 4
|
||||
* c-basic-offset: 4
|
||||
* End:
|
||||
* vim600: noet sw=4 ts=4 fdm=marker
|
||||
* vim<600: noet sw=4 ts=4
|
||||
*/
|
||||
@@ -1,12 +0,0 @@
|
||||
--TEST--
|
||||
Phar::apiVersion
|
||||
--SKIPIF--
|
||||
<?php if (!extension_loaded("phar")) print "skip"; ?>
|
||||
--FILE--
|
||||
<?php
|
||||
var_dump(Phar::apiVersion());
|
||||
?>
|
||||
===DONE===
|
||||
--EXPECT--
|
||||
string(5) "1.1.0"
|
||||
===DONE===
|
||||
@@ -1,17 +0,0 @@
|
||||
--TEST--
|
||||
Phar::mapPhar truncated manifest/improper params
|
||||
--SKIPIF--
|
||||
<?php if (!extension_loaded("phar")) print "skip"; ?>
|
||||
--FILE--
|
||||
<?php
|
||||
try {
|
||||
Phar::mapPhar(5, 'hio', 'hi');
|
||||
|
||||
Phar::mapPhar();
|
||||
} catch (Exception $e) {
|
||||
echo $e->getMessage();
|
||||
}
|
||||
__HALT_COMPILER(); ?>
|
||||
--EXPECTF--
|
||||
Warning: Phar::mapPhar() expects at most 2 parameters, 3 given in %s002.php on line %d
|
||||
internal corruption of phar "%s002.php" (truncated manifest at manifest length)
|
||||
@@ -1,13 +0,0 @@
|
||||
--TEST--
|
||||
Phar::canCompress
|
||||
--SKIPIF--
|
||||
<?php if (!extension_loaded("phar")) print "skip"; ?>
|
||||
--FILE--
|
||||
<?php
|
||||
/* check this works and actually returns the boolean value */
|
||||
var_dump(Phar::canCompress() == (
|
||||
extension_loaded("zlib") || extension_loaded("bz2")
|
||||
));
|
||||
?>
|
||||
--EXPECT--
|
||||
bool(true)
|
||||
@@ -1,14 +0,0 @@
|
||||
--TEST--
|
||||
Phar::canCompress, specific
|
||||
--SKIPIF--
|
||||
<?php if (!extension_loaded("phar")) print "skip"; ?>
|
||||
--FILE--
|
||||
<?php
|
||||
var_dump(Phar::canCompress(Phar::GZ) == extension_loaded("zlib"));
|
||||
var_dump(Phar::canCompress(Phar::BZ2) == extension_loaded("bz2"));
|
||||
?>
|
||||
===DONE===
|
||||
--EXPECT--
|
||||
bool(true)
|
||||
bool(true)
|
||||
===DONE===
|
||||
@@ -1,14 +0,0 @@
|
||||
--TEST--
|
||||
Phar::mapPhar no __HALT_COMPILER();
|
||||
--SKIPIF--
|
||||
<?php if (!extension_loaded("phar")) print "skip";?>
|
||||
--FILE--
|
||||
<?php
|
||||
try {
|
||||
Phar::mapPhar('hio');
|
||||
} catch (Exception $e) {
|
||||
echo $e->getMessage();
|
||||
}
|
||||
?>
|
||||
--EXPECTF--
|
||||
__HALT_COMPILER(); must be declared in a phar
|
||||
@@ -1,14 +0,0 @@
|
||||
--TEST--
|
||||
Phar::mapPhar truncated manifest (none)
|
||||
--SKIPIF--
|
||||
<?php if (!extension_loaded("phar")) print "skip";?>
|
||||
--FILE--
|
||||
<?php
|
||||
try {
|
||||
Phar::mapPhar('hio');
|
||||
} catch (Exception $e) {
|
||||
echo $e->getMessage();
|
||||
}
|
||||
__HALT_COMPILER(); ?>()
|
||||
--EXPECTF--
|
||||
internal corruption of phar "%s" (truncated manifest at manifest length)
|
||||
@@ -1,14 +0,0 @@
|
||||
--TEST--
|
||||
Phar::mapPhar truncated manifest (manifest length truncated)
|
||||
--SKIPIF--
|
||||
<?php if (!extension_loaded("phar")) print "skip";?>
|
||||
--FILE--
|
||||
<?php
|
||||
try {
|
||||
Phar::mapPhar('hio');
|
||||
} catch (Exception $e) {
|
||||
echo $e->getMessage();
|
||||
}
|
||||
__HALT_COMPILER(); ?>
|
||||
--EXPECTF--
|
||||
internal corruption of phar "%s" (truncated manifest at manifest length)
|
||||
@@ -1,14 +0,0 @@
|
||||
--TEST--
|
||||
Phar::mapPhar manifest too big
|
||||
--SKIPIF--
|
||||
<?php if (!extension_loaded("phar")) print "skip";?>
|
||||
--FILE--
|
||||
<?php
|
||||
try {
|
||||
Phar::mapPhar('hio');
|
||||
} catch (Exception $e) {
|
||||
echo $e->getMessage();
|
||||
}
|
||||
__HALT_COMPILER(); ?>~~~~
|
||||
--EXPECTF--
|
||||
manifest cannot be larger than 1 MB in phar "%s"
|
||||
@@ -1,21 +0,0 @@
|
||||
--TEST--
|
||||
Phar::mapPhar truncated manifest (not enough for manifest length)
|
||||
--SKIPIF--
|
||||
<?php if (!extension_loaded("phar")) print "skip";?>
|
||||
--FILE--
|
||||
<?php
|
||||
$file = "<?php
|
||||
Phar::mapPhar('hio');
|
||||
__HALT_COMPILER(); ?>";
|
||||
$file .= pack('V', 500) . 'notenough';
|
||||
file_put_contents(dirname(__FILE__) . '/' . basename(__FILE__, '.php') . '.phar.php', $file);
|
||||
try {
|
||||
include dirname(__FILE__) . '/' . basename(__FILE__, '.php') . '.phar.php';
|
||||
} catch (Exception $e) {
|
||||
echo $e->getMessage();
|
||||
}
|
||||
?>
|
||||
--CLEAN--
|
||||
<?php unlink(dirname(__FILE__) . '/' . basename(__FILE__, '.clean.php') . '.phar.php'); ?>
|
||||
--EXPECTF--
|
||||
internal corruption of phar "%s" (truncated manifest header)
|
||||
@@ -1,23 +0,0 @@
|
||||
--TEST--
|
||||
Phar::mapPhar too many manifest entries
|
||||
--SKIPIF--
|
||||
<?php if (!extension_loaded("phar")) print "skip";?>
|
||||
--INI--
|
||||
phar.require_hash=0
|
||||
--FILE--
|
||||
<?php
|
||||
$file = "<?php
|
||||
Phar::mapPhar('hio');
|
||||
__HALT_COMPILER(); ?>";
|
||||
$file .= pack('VVnVVV', 500, 500, 0x1000, 0x00000000, 0, 0) . str_repeat('A', 500);
|
||||
file_put_contents(dirname(__FILE__) . '/' . basename(__FILE__, '.php') . '.phar.php', $file);
|
||||
try {
|
||||
include dirname(__FILE__) . '/' . basename(__FILE__, '.php') . '.phar.php';
|
||||
} catch (Exception $e) {
|
||||
echo $e->getMessage();
|
||||
}
|
||||
?>
|
||||
--CLEAN--
|
||||
<?php unlink(dirname(__FILE__) . '/' . basename(__FILE__, '.clean.php') . '.phar.php'); ?>
|
||||
--EXPECTF--
|
||||
internal corruption of phar "%s009.phar.php" (too many manifest entries for size of manifest)
|
||||
@@ -1,29 +0,0 @@
|
||||
--TEST--
|
||||
Phar::mapPhar buffer overrun
|
||||
--SKIPIF--
|
||||
<?php if (!extension_loaded("phar")) print "skip";?>
|
||||
--INI--
|
||||
phar.require_hash=0
|
||||
--FILE--
|
||||
<?php
|
||||
$file = "<?php
|
||||
Phar::mapPhar('hio');
|
||||
__HALT_COMPILER(); ?>";
|
||||
|
||||
// this fails because the manifest length does not include the other 10 byte manifest data
|
||||
|
||||
$manifest = pack('V', 1) . 'a' . pack('VVVVVV', 0, time(), 0, crc32(''), 0x00000000, 0);
|
||||
$file .= pack('VVnVV', strlen($manifest), 1, 0x1000, 0x00000000, 3) . 'hio' . pack('V', 0) . $manifest;
|
||||
|
||||
file_put_contents(dirname(__FILE__) . '/' . basename(__FILE__, '.php') . '.phar.php', $file);
|
||||
try {
|
||||
include dirname(__FILE__) . '/' . basename(__FILE__, '.php') . '.phar.php';
|
||||
echo file_get_contents('phar://hio/a');
|
||||
} catch (Exception $e) {
|
||||
echo $e->getMessage();
|
||||
}
|
||||
?>
|
||||
--CLEAN--
|
||||
<?php unlink(dirname(__FILE__) . '/' . basename(__FILE__, '.clean.php') . '.phar.php'); ?>
|
||||
--EXPECTF--
|
||||
internal corruption of phar "%s" (too many manifest entries for size of manifest)
|
||||
@@ -1,30 +0,0 @@
|
||||
--TEST--
|
||||
Phar::mapPhar filesize too small in manifest
|
||||
--SKIPIF--
|
||||
<?php if (!extension_loaded("phar")) print "skip";?>
|
||||
--INI--
|
||||
phar.require_hash=0
|
||||
--FILE--
|
||||
<?php
|
||||
$fname = dirname(__FILE__) . '/' . basename(__FILE__, '.php') . '.phar.php';
|
||||
$pname = 'phar://' . $fname;
|
||||
$file = "<?php
|
||||
Phar::mapPhar('hio');
|
||||
__HALT_COMPILER(); ?>";
|
||||
|
||||
// compressed file length does not match incompressed lentgh for an uncompressed file
|
||||
|
||||
$files = array();
|
||||
$files['a'] = array('cont'=>'a','ulen'=>1,'clen'=>2);;
|
||||
include 'phar_test.inc';
|
||||
try {
|
||||
include $fname;
|
||||
echo file_get_contents('phar://hio/a');
|
||||
} catch (Exception $e) {
|
||||
echo $e->getMessage();
|
||||
}
|
||||
?>
|
||||
--CLEAN--
|
||||
<?php unlink(dirname(__FILE__) . '/' . basename(__FILE__, '.clean.php') . '.phar.php'); ?>
|
||||
--EXPECTF--
|
||||
internal corruption of phar "%s" (compressed and uncompressed size does not match for uncompressed entry)
|
||||
@@ -1,25 +0,0 @@
|
||||
--TEST--
|
||||
Phar::mapPhar valid file
|
||||
--SKIPIF--
|
||||
<?php if (!extension_loaded("phar")) print "skip";?>
|
||||
--INI--
|
||||
phar.require_hash=0
|
||||
--FILE--
|
||||
<?php
|
||||
$fname = dirname(__FILE__) . '/' . basename(__FILE__, '.php') . '.phar.php';
|
||||
$pname = 'phar://' . $fname;
|
||||
$file = "<?php
|
||||
Phar::mapPhar('hio');
|
||||
__HALT_COMPILER(); ?>";
|
||||
|
||||
$files = array();
|
||||
$files['a'] = 'a';
|
||||
|
||||
include 'phar_test.inc';
|
||||
include $fname;
|
||||
echo file_get_contents('phar://hio/a');
|
||||
?>
|
||||
--CLEAN--
|
||||
<?php unlink(dirname(__FILE__) . '/' . basename(__FILE__, '.clean.php') . '.phar.php'); ?>
|
||||
--EXPECT--
|
||||
a
|
||||
@@ -1,23 +0,0 @@
|
||||
--TEST--
|
||||
Phar::mapPhar filesize mismatch
|
||||
--SKIPIF--
|
||||
<?php if (!extension_loaded("phar")) print "skip";?>
|
||||
--INI--
|
||||
phar.require_hash=0
|
||||
--FILE--
|
||||
<?php
|
||||
$fname = dirname(__FILE__) . '/' . basename(__FILE__, '.php') . '.phar.php';
|
||||
$pname = 'phar://' . $fname;
|
||||
$file = "<?php __HALT_COMPILER(); ?>";
|
||||
// filesize should be 1, and is 2
|
||||
|
||||
$files = array();
|
||||
$files['a'] = array('cont'=>'a', 'ulen'=>2, 'clen'=>2);
|
||||
include 'phar_test.inc';
|
||||
|
||||
echo file_get_contents($pname.'/a');
|
||||
?>
|
||||
--CLEAN--
|
||||
<?php unlink(dirname(__FILE__) . '/' . basename(__FILE__, '.clean.php') . '.phar.php'); ?>
|
||||
--EXPECTF--
|
||||
Warning: file_get_contents(phar://%s/a): failed to open stream: phar error: internal corruption of phar "%s" (%s file "a") in %s on line %d
|
||||
@@ -1,23 +0,0 @@
|
||||
--TEST--
|
||||
Phar::mapPhar filesize mismatch
|
||||
--SKIPIF--
|
||||
<?php if (!extension_loaded("phar")) print "skip";?>
|
||||
--INI--
|
||||
phar.require_hash=0
|
||||
--FILE--
|
||||
<?php
|
||||
$fname = dirname(__FILE__) . '/' . basename(__FILE__, '.php') . '.phar.php';
|
||||
$pname = 'phar://' . $fname;
|
||||
$file = "<?php __HALT_COMPILER(); ?>";
|
||||
// wrong crc32
|
||||
|
||||
$files = array();
|
||||
$files['a'] = array('cont'=>'a', 'crc32'=>crc32('aX'));
|
||||
include 'phar_test.inc';
|
||||
|
||||
echo file_get_contents($pname.'/a');
|
||||
?>
|
||||
--CLEAN--
|
||||
<?php unlink(dirname(__FILE__) . '/' . basename(__FILE__, '.clean.php') . '.phar.php'); ?>
|
||||
--EXPECTF--
|
||||
Warning: file_get_contents(phar://%s/a): failed to open stream: phar error: internal corruption of phar "%s" (crc32 mismatch on file "a") in %s on line %d
|
||||
@@ -1,23 +0,0 @@
|
||||
--TEST--
|
||||
Phar::mapPhar valid file (gzipped)
|
||||
--SKIPIF--
|
||||
<?php if (!extension_loaded("phar")) print "skip"; ?>
|
||||
<?php if (!extension_loaded("zlib")) print "skip zlib not present"; ?>
|
||||
--INI--
|
||||
phar.require_hash=0
|
||||
--FILE--
|
||||
<?php
|
||||
$fname = dirname(__FILE__) . '/' . basename(__FILE__, '.php') . '.phar.php';
|
||||
$pname = 'phar://' . $fname;
|
||||
$file = "<?php __HALT_COMPILER(); ?>";
|
||||
|
||||
$files = array();
|
||||
$files['a'] = array('cont'=>'a','comp'=>chr(75) . chr(4) . chr(0) /* 'a' gzdeflated */, 'flags'=>0x00001000);
|
||||
include 'phar_test.inc';
|
||||
|
||||
echo file_get_contents($pname .'/a');
|
||||
?>
|
||||
--CLEAN--
|
||||
<?php unlink(dirname(__FILE__) . '/' . basename(__FILE__, '.clean.php') . '.phar.php'); ?>
|
||||
--EXPECT--
|
||||
a
|
||||
@@ -1,23 +0,0 @@
|
||||
--TEST--
|
||||
Phar::mapPhar valid file (bzip2)
|
||||
--SKIPIF--
|
||||
<?php if (!extension_loaded("phar")) print "skip";?>
|
||||
<?php if (!extension_loaded("bz2")) print "skip bz2 not present"; ?>
|
||||
--INI--
|
||||
phar.require_hash=0
|
||||
--FILE--
|
||||
<?php
|
||||
$fname = dirname(__FILE__) . '/' . basename(__FILE__, '.php') . '.phar.php';
|
||||
$pname = 'phar://' . $fname;
|
||||
$file = "<?php __HALT_COMPILER(); ?>";
|
||||
|
||||
$files = array();
|
||||
$files['a'] = array('cont'=>'Hello World', 'comp'=>pack('H*', '425a6834314159265359065c89da0000009780400000400080060490002000310c082031a916c41d41e2ee48a70a1200cb913b40'),'flags'=>0x00002000);
|
||||
include 'phar_test.inc';
|
||||
|
||||
var_dump(file_get_contents($pname . '/a'));
|
||||
?>
|
||||
--CLEAN--
|
||||
<?php unlink(dirname(__FILE__) . '/' . basename(__FILE__, '.clean.php') . '.phar.php'); ?>
|
||||
--EXPECT--
|
||||
string(11) "Hello World"
|
||||
@@ -1,39 +0,0 @@
|
||||
--TEST--
|
||||
Phar::mapPhar invalid file (gzipped file length is too short)
|
||||
--SKIPIF--
|
||||
<?php if (!extension_loaded("phar")) print "skip";?>
|
||||
<?php if (!extension_loaded("zlib")) print "skip zlib not present"; ?>
|
||||
--INI--
|
||||
phar.require_hash=0
|
||||
--FILE--
|
||||
<?php
|
||||
$fname = dirname(__FILE__) . '/' . basename(__FILE__, '.php') . '.phar.php';
|
||||
$pname = 'phar://' . $fname;
|
||||
$file = "<?php __HALT_COMPILER(); ?>";
|
||||
// file length is too short
|
||||
|
||||
$files = array();
|
||||
// "hi" gzdeflated
|
||||
$files['a'] = array('cont'=>'a','comp'=> pack('H*', 'cbc80400'),'flags'=>0x00001000, 'ulen' => 1, 'clen' => 4);
|
||||
$files['b'] = $files['a'];
|
||||
$files['c'] = array('cont'=>'*');
|
||||
$files['d'] = $files['a'];
|
||||
include 'phar_test.inc';
|
||||
|
||||
var_dump(file_get_contents($pname . '/a'));
|
||||
var_dump(file_get_contents($pname . '/b'));
|
||||
var_dump(file_get_contents($pname . '/c'));
|
||||
var_dump(file_get_contents($pname . '/d'));
|
||||
?>
|
||||
--CLEAN--
|
||||
<?php unlink(dirname(__FILE__) . '/' . basename(__FILE__, '.clean.php') . '.phar.php'); ?>
|
||||
--EXPECTF--
|
||||
Warning: file_get_contents(phar://%s/a): failed to open stream: phar error: internal corruption of phar "%s" (actual filesize mismatch on file "a") in %s on line %d
|
||||
bool(false)
|
||||
|
||||
Warning: file_get_contents(phar://%s/b): failed to open stream: phar error: internal corruption of phar "%s" (actual filesize mismatch on file "b") in %s on line %d
|
||||
bool(false)
|
||||
string(1) "*"
|
||||
|
||||
Warning: file_get_contents(phar://%s/d): failed to open stream: phar error: internal corruption of phar "%s" (actual filesize mismatch on file "d") in %s on line %d
|
||||
bool(false)
|
||||
@@ -1,24 +0,0 @@
|
||||
--TEST--
|
||||
Phar::mapPhar invalid file (gzipped file length is too short)
|
||||
--SKIPIF--
|
||||
<?php if (!extension_loaded("phar")) print "skip";?>
|
||||
<?php if (!extension_loaded("zlib")) print "skip zlib not present"; ?>
|
||||
--INI--
|
||||
phar.require_hash=0
|
||||
--FILE--
|
||||
<?php
|
||||
$fname = dirname(__FILE__) . '/' . basename(__FILE__, '.php') . '.phar.php';
|
||||
$pname = 'phar://' . $fname;
|
||||
$file = "<?php __HALT_COMPILER(); ?>";
|
||||
// file length is too short
|
||||
|
||||
$files = array();
|
||||
$files['a'] = array('cont'=>'a','flags'=>0x00001000, 'clen' => 1);
|
||||
include 'phar_test.inc';
|
||||
|
||||
echo file_get_contents($pname . '/a');
|
||||
?>
|
||||
--CLEAN--
|
||||
<?php unlink(dirname(__FILE__) . '/' . basename(__FILE__, '.clean.php') . '.phar.php'); ?>
|
||||
--EXPECTF--
|
||||
Warning: file_get_contents(phar://%s/a): failed to open stream: phar error: internal corruption of phar "%s" (actual filesize mismatch on file "a") in %s on line %d
|
||||
@@ -1,25 +0,0 @@
|
||||
--TEST--
|
||||
Phar: opendir test - no dir specified at all
|
||||
--SKIPIF--
|
||||
<?php if (!extension_loaded("phar")) print "skip"; ?>
|
||||
--INI--
|
||||
phar.require_hash=0
|
||||
--FILE--
|
||||
<?php
|
||||
$fname = dirname(__FILE__) . '/' . basename(__FILE__, '.php') . '.phar.php';
|
||||
$pname = 'phar://' . $fname;
|
||||
$file = "<?php
|
||||
Phar::mapPhar('hio');
|
||||
__HALT_COMPILER(); ?>";
|
||||
|
||||
$files = array();
|
||||
$files['a'] = 'abc';
|
||||
include 'phar_test.inc';
|
||||
|
||||
include $fname;
|
||||
$dir = opendir('phar://hio');
|
||||
?>
|
||||
--CLEAN--
|
||||
<?php unlink(dirname(__FILE__) . '/' . basename(__FILE__, '.clean.php') . '.phar.php'); ?>
|
||||
--EXPECTF--
|
||||
Warning: opendir(phar://hio): failed to open dir: phar error: no directory in "phar://hio", must have at least phar://hio/ for root directory (always use full path to a new phar) in %s on line %d
|
||||
@@ -1,33 +0,0 @@
|
||||
--TEST--
|
||||
Phar: opendir test, root directory
|
||||
--SKIPIF--
|
||||
<?php if (!extension_loaded("phar")) print "skip"; ?>
|
||||
--INI--
|
||||
phar.require_hash=0
|
||||
--FILE--
|
||||
<?php
|
||||
$fname = dirname(__FILE__) . '/' . basename(__FILE__, '.php') . '.phar.php';
|
||||
$pname = 'phar://' . $fname;
|
||||
$file = "<?php
|
||||
Phar::mapPhar('hio');
|
||||
__HALT_COMPILER(); ?>";
|
||||
|
||||
$files = array();
|
||||
$files['a'] = 'a';
|
||||
$files['b/a'] = 'b';
|
||||
include 'phar_test.inc';
|
||||
|
||||
include $fname;
|
||||
$dir = opendir('phar://hio/');
|
||||
while (false !== ($a = readdir($dir))) {
|
||||
var_dump($a);
|
||||
var_dump(is_dir('phar://hio/' . $a));
|
||||
}
|
||||
?>
|
||||
--CLEAN--
|
||||
<?php unlink(dirname(__FILE__) . '/' . basename(__FILE__, '.clean.php') . '.phar.php'); ?>
|
||||
--EXPECT--
|
||||
string(1) "a"
|
||||
bool(false)
|
||||
string(1) "b"
|
||||
bool(true)
|
||||
@@ -1,34 +0,0 @@
|
||||
--TEST--
|
||||
Phar: opendir test, subdirectory
|
||||
--SKIPIF--
|
||||
<?php if (!extension_loaded("phar")) print "skip"; ?>
|
||||
--INI--
|
||||
phar.require_hash=0
|
||||
--FILE--
|
||||
<?php
|
||||
$fname = dirname(__FILE__) . '/' . basename(__FILE__, '.php') . '.phar.php';
|
||||
$pname = 'phar://' . $fname;
|
||||
$file = "<?php
|
||||
Phar::mapPhar('hio');
|
||||
__HALT_COMPILER(); ?>";
|
||||
|
||||
$files = array();
|
||||
$files['a'] = 'a';
|
||||
$files['b/a'] = 'b';
|
||||
$files['b/c/d'] = 'c';
|
||||
$files['bad/c'] = 'd';
|
||||
include 'phar_test.inc';
|
||||
include $fname;
|
||||
$dir = opendir('phar://hio/b');
|
||||
while (false !== ($a = readdir($dir))) {
|
||||
var_dump($a);
|
||||
var_dump(is_dir('phar://hio/b/' . $a));
|
||||
}
|
||||
?>
|
||||
--CLEAN--
|
||||
<?php unlink(dirname(__FILE__) . '/' . basename(__FILE__, '.clean.php') . '.phar.php'); ?>
|
||||
--EXPECT--
|
||||
string(1) "a"
|
||||
bool(false)
|
||||
string(1) "c"
|
||||
bool(true)
|
||||
@@ -1,65 +0,0 @@
|
||||
--TEST--
|
||||
Phar: opendir test, recurse into
|
||||
--SKIPIF--
|
||||
<?php if (!extension_loaded("phar")) print "skip"; ?>
|
||||
--INI--
|
||||
phar.require_hash=0
|
||||
--FILE--
|
||||
<?php
|
||||
$fname = dirname(__FILE__) . '/' . basename(__FILE__, '.php') . '.phar.php';
|
||||
$pname = 'phar://' . $fname;
|
||||
$file = "<?php
|
||||
Phar::mapPhar('hio');
|
||||
__HALT_COMPILER(); ?>";
|
||||
|
||||
$files = array();
|
||||
$files['a'] = 'a';
|
||||
$files['b/a'] = 'b';
|
||||
$files['b/c/d'] = 'c';
|
||||
$files['bad/c'] = 'd';
|
||||
include 'phar_test.inc';
|
||||
include $fname;
|
||||
|
||||
function dump($phar, $base)
|
||||
{
|
||||
var_dump($phar . $base);
|
||||
$dir = opendir($phar . $base);
|
||||
if ($base == '/')
|
||||
{
|
||||
$base = '';
|
||||
}
|
||||
while (false !== ($entry = readdir($dir))) {
|
||||
$entry = $base . '/' . $entry;
|
||||
var_dump($entry);
|
||||
var_dump(is_dir($phar . $entry));
|
||||
if (is_dir($phar . $entry))
|
||||
{
|
||||
dump($phar, $entry);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
dump('phar://hio', '/');
|
||||
|
||||
?>
|
||||
--CLEAN--
|
||||
<?php unlink(dirname(__FILE__) . '/' . basename(__FILE__, '.clean.php') . '.phar.php'); ?>
|
||||
--EXPECT--
|
||||
string(11) "phar://hio/"
|
||||
string(2) "/a"
|
||||
bool(false)
|
||||
string(2) "/b"
|
||||
bool(true)
|
||||
string(12) "phar://hio/b"
|
||||
string(4) "/b/a"
|
||||
bool(false)
|
||||
string(4) "/b/c"
|
||||
bool(true)
|
||||
string(14) "phar://hio/b/c"
|
||||
string(6) "/b/c/d"
|
||||
bool(false)
|
||||
string(4) "/bad"
|
||||
bool(true)
|
||||
string(14) "phar://hio/bad"
|
||||
string(6) "/bad/c"
|
||||
bool(false)
|
||||
@@ -1,73 +0,0 @@
|
||||
--TEST--
|
||||
Phar: opendir test, recurse into
|
||||
--SKIPIF--
|
||||
<?php if (!extension_loaded("phar")) print "skip"; ?>
|
||||
--INI--
|
||||
phar.require_hash=0
|
||||
--FILE--
|
||||
<?php
|
||||
$fname = dirname(__FILE__) . '/' . basename(__FILE__, '.php') . '.phar.php';
|
||||
$pname = 'phar://' . $fname;
|
||||
$file = "<?php
|
||||
Phar::mapPhar('hio');
|
||||
__HALT_COMPILER(); ?>";
|
||||
|
||||
$files = array();
|
||||
$files['a'] = 'a';
|
||||
$files['b/a'] = 'b';
|
||||
$files['b/c/d'] = 'c';
|
||||
$files['bad/c'] = 'd';
|
||||
include 'phar_test.inc';
|
||||
include $fname;
|
||||
|
||||
function dump($phar, $base)
|
||||
{
|
||||
var_dump($phar . $base);
|
||||
$dir = opendir($phar . $base);
|
||||
if ($base == '/')
|
||||
{
|
||||
$base = '';
|
||||
}
|
||||
while (false !== ($entry = readdir($dir))) {
|
||||
$entry = $base . '/' . $entry;
|
||||
var_dump($entry);
|
||||
var_dump(is_dir($phar . $entry));
|
||||
if (is_dir($phar . $entry))
|
||||
{
|
||||
dump($phar, $entry);
|
||||
}
|
||||
else
|
||||
{
|
||||
var_dump(file_get_contents($phar . $entry));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
dump('phar://hio', '/');
|
||||
|
||||
?>
|
||||
--CLEAN--
|
||||
<?php unlink(dirname(__FILE__) . '/' . basename(__FILE__, '.clean.php') . '.phar.php'); ?>
|
||||
--EXPECT--
|
||||
string(11) "phar://hio/"
|
||||
string(2) "/a"
|
||||
bool(false)
|
||||
string(1) "a"
|
||||
string(2) "/b"
|
||||
bool(true)
|
||||
string(12) "phar://hio/b"
|
||||
string(4) "/b/a"
|
||||
bool(false)
|
||||
string(1) "b"
|
||||
string(4) "/b/c"
|
||||
bool(true)
|
||||
string(14) "phar://hio/b/c"
|
||||
string(6) "/b/c/d"
|
||||
bool(false)
|
||||
string(1) "c"
|
||||
string(4) "/bad"
|
||||
bool(true)
|
||||
string(14) "phar://hio/bad"
|
||||
string(6) "/bad/c"
|
||||
bool(false)
|
||||
string(1) "d"
|
||||
@@ -1,136 +0,0 @@
|
||||
--TEST--
|
||||
Phar: url stat
|
||||
--SKIPIF--
|
||||
<?php if (!extension_loaded("phar")) print "skip"; ?>
|
||||
--INI--
|
||||
phar.require_hash=0
|
||||
--FILE--
|
||||
<?php
|
||||
$fname = dirname(__FILE__) . '/' . basename(__FILE__, '.php') . '.phar.php';
|
||||
$pname = 'phar://' . $fname;
|
||||
$file = "<?php
|
||||
Phar::mapPhar('hio');
|
||||
__HALT_COMPILER(); ?>";
|
||||
|
||||
$pfile = dirname(__FILE__) . '/' . basename(__FILE__, '.php') . '.phar.php';
|
||||
$files = array();
|
||||
$files['a'] = 'a';
|
||||
$files['b/a'] = 'b';
|
||||
$files['b/c/d'] = 'c';
|
||||
$files['bad/c'] = 'd';
|
||||
include 'phar_test.inc';
|
||||
include $fname;
|
||||
|
||||
var_dump(stat('phar://hio/a'), stat('phar://hio/b'));
|
||||
?>
|
||||
--CLEAN--
|
||||
<?php unlink(dirname(__FILE__) . '/' . basename(__FILE__, '.clean.php') . '.phar.php'); ?>
|
||||
--EXPECTF--
|
||||
array(26) {
|
||||
[0]=>
|
||||
int(12)
|
||||
[1]=>
|
||||
int(%d)
|
||||
[2]=>
|
||||
int(33060)
|
||||
[3]=>
|
||||
int(1)
|
||||
[4]=>
|
||||
int(0)
|
||||
[5]=>
|
||||
int(0)
|
||||
[6]=>
|
||||
int(-1)
|
||||
[7]=>
|
||||
int(1)
|
||||
[8]=>
|
||||
int(%d)
|
||||
[9]=>
|
||||
int(%d)
|
||||
[10]=>
|
||||
int(%d)
|
||||
[11]=>
|
||||
int(-1)
|
||||
[12]=>
|
||||
int(-1)
|
||||
["dev"]=>
|
||||
int(12)
|
||||
["ino"]=>
|
||||
int(%d)
|
||||
["mode"]=>
|
||||
int(33060)
|
||||
["nlink"]=>
|
||||
int(1)
|
||||
["uid"]=>
|
||||
int(0)
|
||||
["gid"]=>
|
||||
int(0)
|
||||
["rdev"]=>
|
||||
int(-1)
|
||||
["size"]=>
|
||||
int(1)
|
||||
["atime"]=>
|
||||
int(%d)
|
||||
["mtime"]=>
|
||||
int(%d)
|
||||
["ctime"]=>
|
||||
int(%d)
|
||||
["blksize"]=>
|
||||
int(-1)
|
||||
["blocks"]=>
|
||||
int(-1)
|
||||
}
|
||||
array(26) {
|
||||
[0]=>
|
||||
int(12)
|
||||
[1]=>
|
||||
int(%d)
|
||||
[2]=>
|
||||
int(16749)
|
||||
[3]=>
|
||||
int(1)
|
||||
[4]=>
|
||||
int(0)
|
||||
[5]=>
|
||||
int(0)
|
||||
[6]=>
|
||||
int(-1)
|
||||
[7]=>
|
||||
int(0)
|
||||
[8]=>
|
||||
int(%d)
|
||||
[9]=>
|
||||
int(%d)
|
||||
[10]=>
|
||||
int(%d)
|
||||
[11]=>
|
||||
int(-1)
|
||||
[12]=>
|
||||
int(-1)
|
||||
["dev"]=>
|
||||
int(12)
|
||||
["ino"]=>
|
||||
int(%d)
|
||||
["mode"]=>
|
||||
int(16749)
|
||||
["nlink"]=>
|
||||
int(1)
|
||||
["uid"]=>
|
||||
int(0)
|
||||
["gid"]=>
|
||||
int(0)
|
||||
["rdev"]=>
|
||||
int(-1)
|
||||
["size"]=>
|
||||
int(0)
|
||||
["atime"]=>
|
||||
int(%d)
|
||||
["mtime"]=>
|
||||
int(%d)
|
||||
["ctime"]=>
|
||||
int(%d)
|
||||
["blksize"]=>
|
||||
int(-1)
|
||||
["blocks"]=>
|
||||
int(-1)
|
||||
}
|
||||
@@ -1,85 +0,0 @@
|
||||
--TEST--
|
||||
Phar: stream stat
|
||||
--SKIPIF--
|
||||
<?php if (!extension_loaded("phar")) print "skip"; ?>
|
||||
--INI--
|
||||
phar.require_hash=0
|
||||
--FILE--
|
||||
<?php
|
||||
$fname = dirname(__FILE__) . '/' . basename(__FILE__, '.php') . '.phar.php';
|
||||
$pname = 'phar://' . $fname;
|
||||
$file = "<?php
|
||||
Phar::mapPhar('hio');
|
||||
__HALT_COMPILER(); ?>";
|
||||
|
||||
$files = array();
|
||||
$files['a'] = 'a';
|
||||
$files['b/a'] = 'b';
|
||||
$files['b/c/d'] = 'c';
|
||||
$files['bad/c'] = 'd';
|
||||
|
||||
include 'phar_test.inc';
|
||||
|
||||
include $fname;
|
||||
|
||||
$fp = fopen('phar://hio/a', 'r');
|
||||
var_dump(fstat($fp));
|
||||
fclose($fp);
|
||||
?>
|
||||
--CLEAN--
|
||||
<?php unlink(dirname(__FILE__) . '/' . basename(__FILE__, '.clean.php') . '.phar.php'); ?>
|
||||
--EXPECTF--
|
||||
array(26) {
|
||||
[0]=>
|
||||
int(12)
|
||||
[1]=>
|
||||
int(%d)
|
||||
[2]=>
|
||||
int(33060)
|
||||
[3]=>
|
||||
int(1)
|
||||
[4]=>
|
||||
int(0)
|
||||
[5]=>
|
||||
int(0)
|
||||
[6]=>
|
||||
int(-1)
|
||||
[7]=>
|
||||
int(1)
|
||||
[8]=>
|
||||
int(%d)
|
||||
[9]=>
|
||||
int(%d)
|
||||
[10]=>
|
||||
int(%d)
|
||||
[11]=>
|
||||
int(-1)
|
||||
[12]=>
|
||||
int(-1)
|
||||
["dev"]=>
|
||||
int(12)
|
||||
["ino"]=>
|
||||
int(%d)
|
||||
["mode"]=>
|
||||
int(33060)
|
||||
["nlink"]=>
|
||||
int(1)
|
||||
["uid"]=>
|
||||
int(0)
|
||||
["gid"]=>
|
||||
int(0)
|
||||
["rdev"]=>
|
||||
int(-1)
|
||||
["size"]=>
|
||||
int(1)
|
||||
["atime"]=>
|
||||
int(%d)
|
||||
["mtime"]=>
|
||||
int(%d)
|
||||
["ctime"]=>
|
||||
int(%d)
|
||||
["blksize"]=>
|
||||
int(-1)
|
||||
["blocks"]=>
|
||||
int(-1)
|
||||
}
|
||||
@@ -1,110 +0,0 @@
|
||||
--TEST--
|
||||
Phar: stream stat
|
||||
--SKIPIF--
|
||||
<?php if (!extension_loaded("phar")) print "skip"; ?>
|
||||
--INI--
|
||||
phar.require_hash=0
|
||||
--FILE--
|
||||
<?php
|
||||
$fname = dirname(__FILE__) . '/' . basename(__FILE__, '.php') . '.phar.php';
|
||||
$pname = 'phar://' . $fname;
|
||||
$file = "<?php
|
||||
Phar::mapPhar('hio');
|
||||
__HALT_COMPILER(); ?>";
|
||||
|
||||
$files = array();
|
||||
$files['a'] = 'abcdefg';
|
||||
|
||||
include 'phar_test.inc';
|
||||
|
||||
include $fname;
|
||||
|
||||
$fp = fopen('phar://hio/a', 'r');
|
||||
var_dump(ftell($fp));
|
||||
echo 'fseek($fp, 1)';var_dump(fseek($fp, 1));
|
||||
var_dump(ftell($fp));
|
||||
echo 'fseek($fp, 1, SEEK_CUR)';var_dump(fseek($fp, 1, SEEK_CUR));
|
||||
var_dump(ftell($fp));
|
||||
echo 'fseek($fp, -1, SEEK_CUR)';var_dump(fseek($fp, -1, SEEK_CUR));
|
||||
var_dump(ftell($fp));
|
||||
echo 'fseek($fp, -1, SEEK_END)';var_dump(fseek($fp, -1, SEEK_END));
|
||||
var_dump(ftell($fp));
|
||||
echo 'fseek($fp, -8, SEEK_END)';var_dump(fseek($fp, -8, SEEK_END));
|
||||
var_dump(ftell($fp));
|
||||
echo 'fseek($fp, -7, SEEK_END)';var_dump(fseek($fp, -7, SEEK_END));
|
||||
var_dump(ftell($fp));
|
||||
echo 'fseek($fp, 0, SEEK_END)';var_dump(fseek($fp, 0, SEEK_END));
|
||||
var_dump(ftell($fp));
|
||||
echo 'fseek($fp, 1, SEEK_END)';var_dump(fseek($fp, 1, SEEK_END));
|
||||
var_dump(ftell($fp));
|
||||
echo 'fseek($fp, -8, SEEK_END)';var_dump(fseek($fp, -8, SEEK_END));
|
||||
var_dump(ftell($fp));
|
||||
echo 'fseek($fp, 6)';var_dump(fseek($fp, 6));
|
||||
var_dump(ftell($fp));
|
||||
echo 'fseek($fp, 8)';var_dump(fseek($fp, 8));
|
||||
var_dump(ftell($fp));
|
||||
echo 'fseek($fp, -1)';var_dump(fseek($fp, -1));
|
||||
var_dump(ftell($fp));
|
||||
echo "next\n";
|
||||
fseek($fp, 4);
|
||||
var_dump(ftell($fp));
|
||||
echo 'fseek($fp, -5, SEEK_CUR)';var_dump(fseek($fp, -5, SEEK_CUR));
|
||||
var_dump(ftell($fp));
|
||||
fseek($fp, 4);
|
||||
var_dump(ftell($fp));
|
||||
echo 'fseek($fp, 5, SEEK_CUR)';var_dump(fseek($fp, 5, SEEK_CUR));
|
||||
var_dump(ftell($fp));
|
||||
fseek($fp, 4);
|
||||
var_dump(ftell($fp));
|
||||
echo 'fseek($fp, -4, SEEK_CUR)';var_dump(fseek($fp, -4, SEEK_CUR));
|
||||
var_dump(ftell($fp));
|
||||
fseek($fp, 4);
|
||||
var_dump(ftell($fp));
|
||||
echo 'fseek($fp, 3, SEEK_CUR)';var_dump(fseek($fp, 3, SEEK_CUR));
|
||||
var_dump(ftell($fp));
|
||||
fclose($fp);
|
||||
?>
|
||||
--CLEAN--
|
||||
<?php
|
||||
unlink(dirname(__FILE__) . '/' . basename(__FILE__, '.clean.php') . '.phar.php');
|
||||
exit(0);
|
||||
?>
|
||||
--EXPECT--
|
||||
int(0)
|
||||
fseek($fp, 1)int(0)
|
||||
int(1)
|
||||
fseek($fp, 1, SEEK_CUR)int(0)
|
||||
int(2)
|
||||
fseek($fp, -1, SEEK_CUR)int(0)
|
||||
int(1)
|
||||
fseek($fp, -1, SEEK_END)int(0)
|
||||
int(6)
|
||||
fseek($fp, -8, SEEK_END)int(-1)
|
||||
bool(false)
|
||||
fseek($fp, -7, SEEK_END)int(0)
|
||||
int(0)
|
||||
fseek($fp, 0, SEEK_END)int(0)
|
||||
int(7)
|
||||
fseek($fp, 1, SEEK_END)int(-1)
|
||||
bool(false)
|
||||
fseek($fp, -8, SEEK_END)int(-1)
|
||||
bool(false)
|
||||
fseek($fp, 6)int(0)
|
||||
int(6)
|
||||
fseek($fp, 8)int(-1)
|
||||
bool(false)
|
||||
fseek($fp, -1)int(-1)
|
||||
bool(false)
|
||||
next
|
||||
int(4)
|
||||
fseek($fp, -5, SEEK_CUR)int(-1)
|
||||
bool(false)
|
||||
int(4)
|
||||
fseek($fp, 5, SEEK_CUR)int(-1)
|
||||
bool(false)
|
||||
int(4)
|
||||
fseek($fp, -4, SEEK_CUR)int(0)
|
||||
int(0)
|
||||
int(4)
|
||||
fseek($fp, 3, SEEK_CUR)int(0)
|
||||
int(7)
|
||||
@@ -1,32 +0,0 @@
|
||||
--TEST--
|
||||
Phar: phar:// file_get_contents
|
||||
--SKIPIF--
|
||||
<?php if (!extension_loaded("phar")) print "skip"; ?>
|
||||
--INI--
|
||||
phar.require_hash=0
|
||||
--FILE--
|
||||
<?php
|
||||
$fname = dirname(__FILE__) . '/' . basename(__FILE__, '.php') . '.phar.php';
|
||||
$pname = 'phar://' . $fname;
|
||||
$file = "<?php __HALT_COMPILER(); ?>";
|
||||
|
||||
$files = array();
|
||||
$files['a.php'] = '<?php echo "This is a\n"; ?>';
|
||||
$files['b.php'] = '<?php echo "This is b\n"; ?>';
|
||||
$files['b/c.php'] = '<?php echo "This is b/c\n"; ?>';
|
||||
|
||||
include 'phar_test.inc';
|
||||
|
||||
var_dump(file_get_contents($pname . '/a.php'));
|
||||
var_dump(file_get_contents($pname . '/b.php'));
|
||||
var_dump(file_get_contents($pname . '/b/c.php'));
|
||||
|
||||
?>
|
||||
===DONE===
|
||||
--CLEAN--
|
||||
<?php unlink(dirname(__FILE__) . '/' . basename(__FILE__, '.clean.php') . '.phar.php'); ?>
|
||||
--EXPECT--
|
||||
string(28) "<?php echo "This is a\n"; ?>"
|
||||
string(28) "<?php echo "This is b\n"; ?>"
|
||||
string(30) "<?php echo "This is b/c\n"; ?>"
|
||||
===DONE===
|
||||
@@ -1,32 +0,0 @@
|
||||
--TEST--
|
||||
Phar: phar:// include
|
||||
--SKIPIF--
|
||||
<?php if (!extension_loaded("phar")) print "skip"; ?>
|
||||
--INI--
|
||||
phar.require_hash=0
|
||||
--FILE--
|
||||
<?php
|
||||
$fname = dirname(__FILE__) . '/' . basename(__FILE__, '.php') . '.phar.php';
|
||||
$pname = 'phar://' . $fname;
|
||||
$file = "<?php __HALT_COMPILER(); ?>";
|
||||
|
||||
$files = array();
|
||||
$files['a.php'] = '<?php echo "This is a\n"; ?>';
|
||||
$files['b.php'] = '<?php echo "This is b\n"; ?>';
|
||||
$files['b/c.php'] = '<?php echo "This is b/c\n"; ?>';
|
||||
|
||||
include 'phar_test.inc';
|
||||
|
||||
include $pname . '/a.php';
|
||||
include $pname . '/b.php';
|
||||
include $pname . '/b/c.php';
|
||||
|
||||
?>
|
||||
===DONE===
|
||||
--CLEAN--
|
||||
<?php unlink(dirname(__FILE__) . '/' . basename(__FILE__, '.clean.php') . '.phar.php'); ?>
|
||||
--EXPECT--
|
||||
This is a
|
||||
This is b
|
||||
This is b/c
|
||||
===DONE===
|
||||
@@ -1,32 +0,0 @@
|
||||
--TEST--
|
||||
Phar: phar:// include (repeated names)
|
||||
--SKIPIF--
|
||||
<?php if (!extension_loaded("phar")) print "skip"; ?>
|
||||
--INI--
|
||||
phar.require_hash=0
|
||||
--FILE--
|
||||
<?php
|
||||
$fname = dirname(__FILE__) . '/' . basename(__FILE__, '.php') . '.phar.php';
|
||||
$pname = 'phar://' . $fname;
|
||||
$file = "<?php __HALT_COMPILER(); ?>";
|
||||
|
||||
$files = array();
|
||||
$files['a'] = '<?php echo "This is a\n"; ?>';
|
||||
$files['b'] = '<?php echo "This is b\n"; ?>';
|
||||
$files['b/b'] = '<?php echo "This is b/b\n"; ?>';
|
||||
|
||||
include 'phar_test.inc';
|
||||
|
||||
include $pname . '/a';
|
||||
include $pname . '/b';
|
||||
include $pname . '/b/b';
|
||||
|
||||
?>
|
||||
===DONE===
|
||||
--CLEAN--
|
||||
<?php unlink(dirname(__FILE__) . '/' . basename(__FILE__, '.clean.php') . '.phar.php'); ?>
|
||||
--EXPECT--
|
||||
This is a
|
||||
This is b
|
||||
This is b/b
|
||||
===DONE===
|
||||
@@ -1,34 +0,0 @@
|
||||
--TEST--
|
||||
Phar: phar:// require from within
|
||||
--SKIPIF--
|
||||
<?php if (!extension_loaded("phar")) print "skip"; ?>
|
||||
--INI--
|
||||
phar.require_hash=0
|
||||
--FILE--
|
||||
<?php
|
||||
$fname = dirname(__FILE__) . '/' . basename(__FILE__, '.php') . '.phar.php';
|
||||
$pname = 'phar://' . $fname;
|
||||
$file = "<?php __HALT_COMPILER(); ?>";
|
||||
|
||||
$files = array();
|
||||
$files['a.php'] = '<?php echo "This is a\n"; require "'.$pname.'/b.php"; ?>';
|
||||
$files['b.php'] = '<?php echo "This is b\n"; require "'.$pname.'/b/c.php"; ?>';
|
||||
$files['b/c.php'] = '<?php echo "This is b/c\n"; require "'.$pname.'/b/d.php"; ?>';
|
||||
$files['b/d.php'] = '<?php echo "This is b/d\n"; require "'.$pname.'/e.php"; ?>';
|
||||
$files['e.php'] = '<?php echo "This is e\n"; ?>';
|
||||
|
||||
include 'phar_test.inc';
|
||||
|
||||
require $pname . '/a.php';
|
||||
|
||||
?>
|
||||
===DONE===
|
||||
--CLEAN--
|
||||
<?php unlink(dirname(__FILE__) . '/' . basename(__FILE__, '.clean.php') . '.phar.php'); ?>
|
||||
--EXPECT--
|
||||
This is a
|
||||
This is b
|
||||
This is b/c
|
||||
This is b/d
|
||||
This is e
|
||||
===DONE===
|
||||
@@ -1,62 +0,0 @@
|
||||
--TEST--
|
||||
Phar: phar:// opendir
|
||||
--SKIPIF--
|
||||
<?php if (!extension_loaded("phar")) print "skip"; ?>
|
||||
--INI--
|
||||
phar.require_hash=0
|
||||
--FILE--
|
||||
<?php
|
||||
$fname = dirname(__FILE__) . '/' . basename(__FILE__, '.php') . '.phar.php';
|
||||
$pname = 'phar://' . $fname;
|
||||
$file = "<?php __HALT_COMPILER(); ?>";
|
||||
|
||||
$files = array();
|
||||
$files['a.php'] = '<?php echo "This is a\n"; require "'.$pname.'/b.php"; ?>';
|
||||
$files['b.php'] = '<?php echo "This is b\n"; require "'.$pname.'/b/c.php"; ?>';
|
||||
$files['b/c.php'] = '<?php echo "This is b/c\n"; require "'.$pname.'/b/d.php"; ?>';
|
||||
$files['b/d.php'] = '<?php echo "This is b/d\n"; require "'.$pname.'/e.php"; ?>';
|
||||
$files['e.php'] = '<?php echo "This is e\n"; ?>';
|
||||
|
||||
include 'phar_test.inc';
|
||||
|
||||
function dump($phar, $base)
|
||||
{
|
||||
var_dump(str_replace(dirname(__FILE__), '*', $phar) . $base);
|
||||
$dir = opendir($phar . $base);
|
||||
if ($base == '/')
|
||||
{
|
||||
$base = '';
|
||||
}
|
||||
while (false !== ($entry = readdir($dir))) {
|
||||
$entry = $base . '/' . $entry;
|
||||
var_dump($entry);
|
||||
var_dump(is_dir($phar . $entry));
|
||||
if (is_dir($phar . $entry))
|
||||
{
|
||||
dump($phar, $entry);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
dump($pname, '/');
|
||||
|
||||
?>
|
||||
===DONE===
|
||||
--CLEAN--
|
||||
<?php unlink(dirname(__FILE__) . '/' . basename(__FILE__, '.clean.php') . '.phar.php'); ?>
|
||||
--EXPECTF--
|
||||
string(%d) "phar://*/027.phar.php/"
|
||||
string(6) "/a.php"
|
||||
bool(false)
|
||||
string(2) "/b"
|
||||
bool(true)
|
||||
string(%d) "phar://*/027.phar.php/b"
|
||||
string(8) "/b/c.php"
|
||||
bool(false)
|
||||
string(8) "/b/d.php"
|
||||
bool(false)
|
||||
string(6) "/b.php"
|
||||
bool(false)
|
||||
string(6) "/e.php"
|
||||
bool(false)
|
||||
===DONE===
|
||||
@@ -1,46 +0,0 @@
|
||||
--TEST--
|
||||
Phar::loadPhar
|
||||
--SKIPIF--
|
||||
<?php if (!extension_loaded("phar")) print "skip"; ?>
|
||||
--INI--
|
||||
phar.require_hash=0
|
||||
--FILE--
|
||||
<?php
|
||||
$fname = dirname(__FILE__) . '/' . basename(__FILE__, '.php') . '.phar.php';
|
||||
$pname = 'phar://hio';
|
||||
$file = '<?php include "' . $pname . '/a.php"; __HALT_COMPILER(); ?>';
|
||||
|
||||
$files = array();
|
||||
$files['a.php'] = '<?php echo "This is a\n"; include "'.$pname.'/b.php"; ?>';
|
||||
$files['b.php'] = '<?php echo "This is b\n"; include "'.$pname.'/b/c.php"; ?>';
|
||||
$files['b/c.php'] = '<?php echo "This is b/c\n"; include "'.$pname.'/b/d.php"; ?>';
|
||||
$files['b/d.php'] = '<?php echo "This is b/d\n"; include "'.$pname.'/e.php"; ?>';
|
||||
$files['e.php'] = '<?php echo "This is e\n"; ?>';
|
||||
|
||||
include 'phar_test.inc';
|
||||
|
||||
Phar::loadPhar($fname, 'hio');
|
||||
|
||||
include $fname;
|
||||
|
||||
echo "======\n";
|
||||
|
||||
include $pname . '/a.php';
|
||||
|
||||
?>
|
||||
===DONE===
|
||||
--CLEAN--
|
||||
<?php unlink(dirname(__FILE__) . '/' . basename(__FILE__, '.clean.php') . '.phar.php'); ?>
|
||||
--EXPECTF--
|
||||
This is a
|
||||
This is b
|
||||
This is b/c
|
||||
This is b/d
|
||||
This is e
|
||||
======
|
||||
This is a
|
||||
This is b
|
||||
This is b/c
|
||||
This is b/d
|
||||
This is e
|
||||
===DONE===
|
||||
@@ -1,48 +0,0 @@
|
||||
--TEST--
|
||||
Phar::loadPhar overloading alias names
|
||||
--SKIPIF--
|
||||
<?php if (!extension_loaded("phar")) print "skip"; ?>
|
||||
--INI--
|
||||
phar.require_hash=0
|
||||
--FILE--
|
||||
<?php
|
||||
$fname1 = dirname(__FILE__) . '/' . basename(__FILE__, '.php') . '.1.phar.php';
|
||||
$fname2 = dirname(__FILE__) . '/' . basename(__FILE__, '.php') . '.2.phar.php';
|
||||
$fname = $fname1;
|
||||
$pname = 'phar://hio';
|
||||
$file = '<?php include "' . $pname . '/a.php"; __HALT_COMPILER(); ?>';
|
||||
|
||||
$files = array();
|
||||
$files['a.php'] = '<?php echo "This is a\n"; include "'.$pname.'/b.php"; ?>';
|
||||
$files['b.php'] = '<?php echo "This is b\n"; include "'.$pname.'/b/c.php"; ?>';
|
||||
$files['b/c.php'] = '<?php echo "This is b/c\n"; include "'.$pname.'/b/d.php"; ?>';
|
||||
$files['b/d.php'] = '<?php echo "This is b/d\n"; include "'.$pname.'/e.php"; ?>';
|
||||
$files['e.php'] = '<?php echo "This is e\n"; ?>';
|
||||
|
||||
include 'phar_test.inc';
|
||||
|
||||
file_put_contents($fname2, $file);
|
||||
|
||||
var_dump(Phar::loadPhar($fname1, 'hio'));
|
||||
var_dump(Phar::loadPhar($fname1, 'copy'));
|
||||
try
|
||||
{
|
||||
var_dump(Phar::loadPhar($fname2, 'copy'));
|
||||
}
|
||||
catch (Exception $e)
|
||||
{
|
||||
echo $e->getMessage() . "\n";
|
||||
}
|
||||
|
||||
?>
|
||||
===DONE===
|
||||
--CLEAN--
|
||||
<?php
|
||||
unlink(dirname(__FILE__) . '/' . basename(__FILE__, '.clean.php') . '.1.phar.php');
|
||||
unlink(dirname(__FILE__) . '/' . basename(__FILE__, '.clean.php') . '.2.phar.php');
|
||||
?>
|
||||
--EXPECTF--
|
||||
bool(true)
|
||||
bool(true)
|
||||
alias "copy" is already used for archive "%s029.1.phar.php" cannot be overloaded with "%s029.2.phar.php"
|
||||
===DONE===
|
||||
@@ -1,38 +0,0 @@
|
||||
--TEST--
|
||||
Phar::loadPhar ignoring alias
|
||||
--SKIPIF--
|
||||
<?php if (!extension_loaded("phar")) print "skip"; ?>
|
||||
--INI--
|
||||
phar.require_hash=0
|
||||
--FILE--
|
||||
<?php
|
||||
$fname = dirname(__FILE__) . '/' . basename(__FILE__, '.php') . '.phar.php';
|
||||
$pname = 'phar://' . $fname;
|
||||
$file = '<?php include "' . $pname . '/a.php"; __HALT_COMPILER(); ?>';
|
||||
|
||||
$files = array();
|
||||
$files['a.php'] = '<?php echo "This is a\n"; include "'.$pname.'/b.php"; ?>';
|
||||
$files['b.php'] = '<?php echo "This is b\n"; include "'.$pname.'/b/c.php"; ?>';
|
||||
$files['b/c.php'] = '<?php echo "This is b/c\n"; include "'.$pname.'/b/d.php"; ?>';
|
||||
$files['b/d.php'] = '<?php echo "This is b/d\n"; include "'.$pname.'/e.php"; ?>';
|
||||
$files['e.php'] = '<?php echo "This is e\n"; ?>';
|
||||
|
||||
include 'phar_test.inc';
|
||||
|
||||
Phar::loadPhar($fname);
|
||||
|
||||
require $pname . '/a.php';
|
||||
|
||||
?>
|
||||
===DONE===
|
||||
--CLEAN--
|
||||
<?php
|
||||
unlink(dirname(__FILE__) . '/' . basename(__FILE__, '.clean.php') . '.phar.php');
|
||||
?>
|
||||
--EXPECTF--
|
||||
This is a
|
||||
This is b
|
||||
This is b/c
|
||||
This is b/d
|
||||
This is e
|
||||
===DONE===
|
||||
@@ -1,31 +0,0 @@
|
||||
--TEST--
|
||||
Phar: include and parser error
|
||||
--SKIPIF--
|
||||
<?php if (!extension_loaded("phar")) print "skip"; ?>
|
||||
--INI--
|
||||
phar.require_hash=0
|
||||
--FILE--
|
||||
<?php
|
||||
|
||||
$pharconfig = 3;
|
||||
|
||||
require_once 'phar_oo_test.inc';
|
||||
|
||||
Phar::loadPhar($fname);
|
||||
|
||||
$pname = 'phar://' . $fname . '/a.php';
|
||||
|
||||
var_dump(file_get_contents($pname));
|
||||
require $pname;
|
||||
|
||||
?>
|
||||
===DONE===
|
||||
--CLEAN--
|
||||
<?php
|
||||
unlink(dirname(__FILE__) . '/phar_oo_test.phar.php');
|
||||
__halt_compiler();
|
||||
?>
|
||||
--EXPECTF--
|
||||
string(25) "<?php echo new new class;"
|
||||
|
||||
Parse error: %s error%sexpecting%s in phar://%sphar_oo_test.phar.php/a.php on line %d
|
||||
@@ -1,29 +0,0 @@
|
||||
--TEST--
|
||||
Phar: require hash
|
||||
--SKIPIF--
|
||||
<?php if (!extension_loaded("phar")) print "skip"; ?>
|
||||
--INI--
|
||||
phar.require_hash=1
|
||||
--FILE--
|
||||
<?php
|
||||
|
||||
$pharconfig = 0;
|
||||
|
||||
require_once 'phar_oo_test.inc';
|
||||
|
||||
try {
|
||||
Phar::loadPhar($fname);
|
||||
} catch (Exception $e) {
|
||||
echo $e->getMessage();
|
||||
}
|
||||
|
||||
?>
|
||||
===DONE===
|
||||
--CLEAN--
|
||||
<?php
|
||||
unlink(dirname(__FILE__) . '/phar_oo_test.phar.php');
|
||||
__halt_compiler();
|
||||
?>
|
||||
--EXPECTF--
|
||||
|
||||
phar "%sphar_oo_test.phar.php" does not have a signature===DONE===
|
||||
@@ -1,33 +0,0 @@
|
||||
--TEST--
|
||||
Phar::chmod
|
||||
--SKIPIF--
|
||||
<?php if (!extension_loaded("phar")) print "skip"; ?>
|
||||
--INI--
|
||||
phar.readonly=0
|
||||
phar.require_hash=0
|
||||
--FILE--
|
||||
<?php
|
||||
$fname = dirname(__FILE__) . '/' . basename(__FILE__, '.php') . '.1.phar.php';
|
||||
$pname = 'phar://hio';
|
||||
$file = '<?php include "' . $pname . '/a.php"; __HALT_COMPILER(); ?>';
|
||||
|
||||
$files = array();
|
||||
$files['a.php'] = '<?php echo "This is a\n"; include "'.$pname.'/b.php"; ?>';
|
||||
include 'phar_test.inc';
|
||||
$a = new Phar($fname);
|
||||
var_dump($a['a.php']->isExecutable());
|
||||
$a['a.php']->chmod(0777);
|
||||
var_dump($a['a.php']->isExecutable());
|
||||
$a['a.php']->chmod(0666);
|
||||
var_dump($a['a.php']->isExecutable());
|
||||
?>
|
||||
===DONE===
|
||||
--CLEAN--
|
||||
<?php
|
||||
unlink(dirname(__FILE__) . '/' . basename(__FILE__, '.clean.php') . '.1.phar.php');
|
||||
?>
|
||||
--EXPECTF--
|
||||
bool(false)
|
||||
bool(true)
|
||||
bool(false)
|
||||
===DONE===
|
||||
@@ -1,36 +0,0 @@
|
||||
--TEST--
|
||||
Phar::chmod
|
||||
--SKIPIF--
|
||||
<?php if (!extension_loaded("phar")) print "skip"; ?>
|
||||
--INI--
|
||||
phar.readonly=1
|
||||
phar.require_hash=0
|
||||
--FILE--
|
||||
<?php
|
||||
$fname = dirname(__FILE__) . '/' . basename(__FILE__, '.php') . '.1.phar.php';
|
||||
$pname = 'phar://hio';
|
||||
$file = '<?php include "' . $pname . '/a.php"; __HALT_COMPILER(); ?>';
|
||||
|
||||
$files = array();
|
||||
$files['a.php'] = '<?php echo "This is a\n"; include "'.$pname.'/b.php"; ?>';
|
||||
include 'phar_test.inc';
|
||||
try {
|
||||
$a = new Phar($fname);
|
||||
var_dump($a['a.php']->isExecutable());
|
||||
$a['a.php']->chmod(0777);
|
||||
var_dump($a['a.php']->isExecutable());
|
||||
$a['a.php']->chmod(0666);
|
||||
var_dump($a['a.php']->isExecutable());
|
||||
} catch (Exception $e) {
|
||||
echo $e->getMessage() . "\n";
|
||||
}
|
||||
?>
|
||||
===DONE===
|
||||
--CLEAN--
|
||||
<?php
|
||||
unlink(dirname(__FILE__) . '/' . basename(__FILE__, '.clean.php') . '.1.phar.php');
|
||||
?>
|
||||
--EXPECTF--
|
||||
bool(false)
|
||||
Cannot modify permissions for file "a.php" write operations are prohibited
|
||||
===DONE===
|
||||
@@ -1,48 +0,0 @@
|
||||
--TEST--
|
||||
Phar: create and modify phar
|
||||
--SKIPIF--
|
||||
<?php if (!extension_loaded("phar")) print "skip"; ?>
|
||||
<?php if (!extension_loaded("spl")) print "skip SPL not available"; ?>
|
||||
--INI--
|
||||
phar.readonly=0
|
||||
phar.require_hash=1
|
||||
--FILE--
|
||||
<?php
|
||||
|
||||
$fname = dirname(__FILE__) . '/' . basename(__FILE__, '.php') . '.phar.php';
|
||||
$pname = 'phar://' . $fname;
|
||||
|
||||
@unlink($fname);
|
||||
|
||||
file_put_contents($pname . '/a.php', "brand new!\n");
|
||||
|
||||
$phar = new Phar($fname);
|
||||
$sig1 = $phar->getSignature();
|
||||
|
||||
include $pname . '/a.php';
|
||||
|
||||
file_put_contents($pname .'/a.php', "modified!\n");
|
||||
file_put_contents($pname .'/b.php', "another!\n");
|
||||
|
||||
$phar = new Phar($fname);
|
||||
$sig2 = $phar->getSignature();
|
||||
|
||||
var_dump($sig1['hash']);
|
||||
var_dump($sig2['hash']);
|
||||
var_dump($sig1['hash'] != $sig2['hash']);
|
||||
|
||||
include $pname . '/a.php';
|
||||
include $pname . '/b.php';
|
||||
|
||||
?>
|
||||
===DONE===
|
||||
--CLEAN--
|
||||
<?php unlink(dirname(__FILE__) . '/' . basename(__FILE__, '.clean.php') . '.phar.php'); ?>
|
||||
--EXPECTF--
|
||||
brand new!
|
||||
string(40) "%s"
|
||||
string(40) "%s"
|
||||
bool(true)
|
||||
modified!
|
||||
another!
|
||||
===DONE===
|
||||
@@ -1,21 +0,0 @@
|
||||
--TEST--
|
||||
Phar: create a completely new phar
|
||||
--SKIPIF--
|
||||
<?php if (!extension_loaded("phar")) print "skip"; ?>
|
||||
--INI--
|
||||
phar.readonly=0
|
||||
phar.require_hash=1
|
||||
--FILE--
|
||||
<?php
|
||||
|
||||
file_put_contents('phar://' . dirname(__FILE__) . '/' . basename(__FILE__, '.php') . '.phar.php/a.php',
|
||||
'brand new!');
|
||||
include 'phar://' . dirname(__FILE__) . '/' . basename(__FILE__, '.php') . '.phar.php/a.php';
|
||||
?>
|
||||
|
||||
===DONE===
|
||||
--CLEAN--
|
||||
<?php unlink(dirname(__FILE__) . '/' . basename(__FILE__, '.clean.php') . '.phar.php'); ?>
|
||||
--EXPECT--
|
||||
brand new!
|
||||
===DONE===
|
||||
@@ -1,29 +0,0 @@
|
||||
--TEST--
|
||||
Phar: create a completely new phar
|
||||
--SKIPIF--
|
||||
<?php if (!extension_loaded("phar")) print "skip"; ?>
|
||||
--INI--
|
||||
phar.readonly=1
|
||||
phar.require_hash=1
|
||||
--FILE--
|
||||
<?php
|
||||
|
||||
file_put_contents('phar://' . dirname(__FILE__) . '/' . basename(__FILE__, '.php') . '.phar.php/a.php',
|
||||
'brand new!');
|
||||
include 'phar://' . dirname(__FILE__) . '/' . basename(__FILE__, '.php') . '.phar.php/a.php';
|
||||
?>
|
||||
|
||||
===DONE===
|
||||
--CLEAN--
|
||||
<?php unlink(dirname(__FILE__) . '/' . basename(__FILE__, '.clean.php') . '.phar.php'); ?>
|
||||
--EXPECTF--
|
||||
|
||||
Warning: file_put_contents(phar://%screate_new_phar_b.phar.php/a.php): failed to open stream: phar error: write operations disabled by INI setting in %screate_new_phar_b.php on line %d
|
||||
|
||||
Warning: include(%screate_new_phar_b.phar.php): failed to open stream: No such file or directory in %screate_new_phar_b.php on line %d
|
||||
|
||||
Warning: include(phar://%screate_new_phar_b.phar.php/a.php): failed to open stream: No such file or directory in %screate_new_phar_b.php on line %d
|
||||
|
||||
Warning: include(): Failed opening 'phar://%screate_new_phar_b.phar.php/a.php' for inclusion (include_path='%s') in %screate_new_phar_b.php on line %d
|
||||
|
||||
===DONE===
|
||||
@@ -1,29 +0,0 @@
|
||||
--TEST--
|
||||
Phar: create a completely new phar
|
||||
--SKIPIF--
|
||||
<?php if (!extension_loaded("phar")) print "skip"; ?>
|
||||
<?php if (!extension_loaded("spl")) print "skip SPL not available"; ?>
|
||||
--INI--
|
||||
phar.readonly=0
|
||||
phar.require_hash=1
|
||||
--FILE--
|
||||
<?php
|
||||
|
||||
file_put_contents('phar://' . dirname(__FILE__) . '/' . basename(__FILE__, '.php') . '.phar.php/a.php',
|
||||
'brand new!');
|
||||
|
||||
$phar = new Phar(dirname(__FILE__) . '/' . basename(__FILE__, '.php') . '.phar.php');
|
||||
|
||||
var_dump($phar->getSignature());
|
||||
?>
|
||||
===DONE===
|
||||
--CLEAN--
|
||||
<?php unlink(dirname(__FILE__) . '/' . basename(__FILE__, '.clean.php') . '.phar.php'); ?>
|
||||
--EXPECTF--
|
||||
array(2) {
|
||||
["hash"]=>
|
||||
string(40) "%s"
|
||||
["hash_type"]=>
|
||||
string(5) "SHA-1"
|
||||
}
|
||||
===DONE===
|
||||
@@ -1,64 +0,0 @@
|
||||
--TEST--
|
||||
Phar: create with illegal path
|
||||
--SKIPIF--
|
||||
<?php if (!extension_loaded("phar")) print "skip"; ?>
|
||||
<?php if (!extension_loaded("spl")) print "skip SPL not available"; ?>
|
||||
--INI--
|
||||
phar.readonly=0
|
||||
phar.require_hash=1
|
||||
--FILE--
|
||||
<?php
|
||||
|
||||
$fname = dirname(__FILE__) . '/' . basename(__FILE__, '.php') . '.phar.php';
|
||||
$pname = 'phar://' . $fname;
|
||||
|
||||
@unlink($fname);
|
||||
|
||||
file_put_contents($pname . '/a.php?', "query");
|
||||
file_put_contents($pname . '/b.php?bla', "query");
|
||||
|
||||
var_dump(file_get_contents($pname . '/a.php'));
|
||||
var_dump(file_get_contents($pname . '/b.php'));
|
||||
|
||||
function error_handler($errno, $errmsg)
|
||||
{
|
||||
echo "Error: $errmsg\n";
|
||||
}
|
||||
|
||||
set_error_handler('error_handler');
|
||||
|
||||
$checks = array('/', '.', '../', 'a/..', 'a/', 'b//a.php');
|
||||
foreach($checks as $check)
|
||||
{
|
||||
file_put_contents($pname . '/' . $check, "error");
|
||||
}
|
||||
|
||||
$phar = new Phar($fname);
|
||||
$checks = array("a\0");
|
||||
foreach($checks as $check)
|
||||
{
|
||||
try
|
||||
{
|
||||
$phar[$check] = 'error';
|
||||
}
|
||||
catch(Exception $e)
|
||||
{
|
||||
echo 'Exception: ' . $e->getMessage() . "\n";
|
||||
}
|
||||
}
|
||||
|
||||
?>
|
||||
===DONE===
|
||||
--CLEAN--
|
||||
<?php unlink(dirname(__FILE__) . '/' . basename(__FILE__, '.clean.php') . '.phar.php'); ?>
|
||||
--EXPECTF--
|
||||
string(5) "query"
|
||||
string(5) "query"
|
||||
Error: file_put_contents(phar://%s//): failed to open stream: phar error: invalid path "/" contains empty directory
|
||||
Error: file_put_contents(phar://%s/.): failed to open stream: phar error: invalid path "." contains current directory reference
|
||||
Error: file_put_contents(phar://%s/../): failed to open stream: phar error: invalid path "../" contains empty directory
|
||||
Error: file_put_contents(phar://%s/a/..): failed to open stream: phar error: invalid path "a/.." contains upper directory reference
|
||||
Error: file_put_contents(phar://%s/a/): failed to open stream: phar error: invalid path "a/" contains empty directory
|
||||
Error: file_put_contents(phar://%s/b//a.php): failed to open stream: phar error: invalid path "b//a.php" contains double slash
|
||||
Exception: Entry a does not exist and cannot be created: phar error: invalid path "a" contains illegal character
|
||||
===DONE===
|
||||
@@ -1,48 +0,0 @@
|
||||
--TEST--
|
||||
Phar: delete a file within a .phar
|
||||
--SKIPIF--
|
||||
<?php if (!extension_loaded("phar")) print "skip"; ?>
|
||||
--INI--
|
||||
phar.readonly=0
|
||||
phar.require_hash=0
|
||||
--FILE--
|
||||
<?php
|
||||
$fname = dirname(__FILE__) . '/' . basename(__FILE__, '.php') . '.phar.php';
|
||||
$pname = 'phar://' . $fname;
|
||||
$file = "<?php __HALT_COMPILER(); ?>";
|
||||
|
||||
$files = array();
|
||||
$files['a.php'] = '<?php echo "This is a\n"; ?>';
|
||||
$files['b.php'] = '<?php echo "This is b\n"; ?>';
|
||||
$files['b/c.php'] = '<?php echo "This is b/c\n"; ?>';
|
||||
include 'phar_test.inc';
|
||||
|
||||
include $pname . '/a.php';
|
||||
include $pname . '/b.php';
|
||||
include $pname . '/b/c.php';
|
||||
unlink($pname . '/b/c.php');
|
||||
?>
|
||||
===AFTER===
|
||||
<?php
|
||||
include $pname . '/a.php';
|
||||
include $pname . '/b.php';
|
||||
include $pname . '/b/c.php';
|
||||
?>
|
||||
|
||||
===DONE===
|
||||
--CLEAN--
|
||||
<?php unlink(dirname(__FILE__) . '/' . basename(__FILE__, '.clean.php') . '.phar.php'); ?>
|
||||
--EXPECTF--
|
||||
This is a
|
||||
This is b
|
||||
This is b/c
|
||||
===AFTER===
|
||||
This is a
|
||||
This is b
|
||||
|
||||
Warning: include(%sdelete_in_phar.phar.php/b/c.php): failed to open stream: phar error: "b/c.php" is not a file in phar "%sdelete_in_phar.phar.php" in %sdelete_in_phar.php on line %d
|
||||
|
||||
Warning: include(): Failed opening 'phar://%sdelete_in_phar.phar.php/b/c.php' for inclusion (include_path='%s') in %sdelete_in_phar.php on line %d
|
||||
|
||||
===DONE===
|
||||
|
||||
@@ -1,46 +0,0 @@
|
||||
--TEST--
|
||||
Phar: delete a file within a .phar
|
||||
--SKIPIF--
|
||||
<?php if (!extension_loaded("phar")) print "skip"; ?>
|
||||
--INI--
|
||||
phar.readonly=1
|
||||
phar.require_hash=0
|
||||
--FILE--
|
||||
<?php
|
||||
$fname = dirname(__FILE__) . '/' . basename(__FILE__, '.php') . '.phar.php';
|
||||
$pname = 'phar://' . $fname;
|
||||
$file = "<?php __HALT_COMPILER(); ?>";
|
||||
|
||||
$files = array();
|
||||
$files['a.php'] = '<?php echo "This is a\n"; ?>';
|
||||
$files['b.php'] = '<?php echo "This is b\n"; ?>';
|
||||
$files['b/c.php'] = '<?php echo "This is b/c\n"; ?>';
|
||||
include 'phar_test.inc';
|
||||
|
||||
include $pname . '/a.php';
|
||||
include $pname . '/b.php';
|
||||
include $pname . '/b/c.php';
|
||||
unlink($pname . '/b/c.php');
|
||||
?>
|
||||
===AFTER===
|
||||
<?php
|
||||
include $pname . '/a.php';
|
||||
include $pname . '/b.php';
|
||||
include $pname . '/b/c.php';
|
||||
?>
|
||||
|
||||
===DONE===
|
||||
--CLEAN--
|
||||
<?php unlink(dirname(__FILE__) . '/' . basename(__FILE__, '.clean.php') . '.phar.php'); ?>
|
||||
--EXPECTF--
|
||||
This is a
|
||||
This is b
|
||||
This is b/c
|
||||
|
||||
Warning: unlink(): phar error: write operations disabled by INI setting in %sdelete_in_phar_b.php on line %d
|
||||
===AFTER===
|
||||
This is a
|
||||
This is b
|
||||
This is b/c
|
||||
|
||||
===DONE===
|
||||
@@ -1,51 +0,0 @@
|
||||
--TEST--
|
||||
Phar: delete a file within a .phar (confirm disk file is changed)
|
||||
--SKIPIF--
|
||||
<?php if (!extension_loaded("phar")) print "skip"; ?>
|
||||
--INI--
|
||||
phar.readonly=0
|
||||
phar.require_hash=0
|
||||
--FILE--
|
||||
<?php
|
||||
$fname = dirname(__FILE__) . '/' . basename(__FILE__, '.php') . '.phar.php';
|
||||
$pname = 'phar://' . $fname;
|
||||
$file = "<?php __HALT_COMPILER(); ?>";
|
||||
|
||||
$files = array();
|
||||
$files['a.php'] = '<?php echo "This is a\n"; ?>';
|
||||
$files['b.php'] = '<?php echo "This is b\n"; ?>';
|
||||
$files['b/c.php'] = '<?php echo "This is b/c\n"; ?>';
|
||||
include 'phar_test.inc';
|
||||
|
||||
include $pname . '/a.php';
|
||||
include $pname . '/b.php';
|
||||
include $pname . '/b/c.php';
|
||||
$md5 = md5_file($fname);
|
||||
unlink($pname . '/b/c.php');
|
||||
clearstatcache();
|
||||
$md52 = md5_file($fname);
|
||||
if ($md5 == $md52) echo 'file was not modified';
|
||||
?>
|
||||
===AFTER===
|
||||
<?php
|
||||
include 'phar://' . dirname(__FILE__) . '/' . basename(__FILE__, '.php') . '.phar.php/a.php';
|
||||
include 'phar://' . dirname(__FILE__) . '/' . basename(__FILE__, '.php') . '.phar.php/b.php';
|
||||
include 'phar://' . dirname(__FILE__) . '/' . basename(__FILE__, '.php') . '.phar.php/b/c.php';
|
||||
?>
|
||||
|
||||
===DONE===
|
||||
--CLEAN--
|
||||
<?php unlink(dirname(__FILE__) . '/' . basename(__FILE__, '.clean.php') . '.phar.php'); ?>
|
||||
--EXPECTF--
|
||||
This is a
|
||||
This is b
|
||||
This is b/c
|
||||
===AFTER===
|
||||
This is a
|
||||
This is b
|
||||
|
||||
Warning: include(%sdelete_in_phar_confirm.phar.php/b/c.php): failed to open stream: phar error: "b/c.php" is not a file in phar "%sdelete_in_phar_confirm.phar.php" in %sdelete_in_phar_confirm.php on line %d
|
||||
|
||||
Warning: include(): Failed opening 'phar://%sdelete_in_phar_confirm.phar.php/b/c.php' for inclusion (include_path='%s') in %sdelete_in_phar_confirm.php on line %d
|
||||
|
||||
===DONE===
|
||||
@@ -1 +0,0 @@
|
||||
<?php var_dump(__FILE__); ?>
|
||||
@@ -1,35 +0,0 @@
|
||||
--TEST--
|
||||
Phar: extracted
|
||||
--SKIPIF--
|
||||
<?php if (!extension_loaded("phar")) print "skip"; ?>
|
||||
--INI--
|
||||
phar.readonly=0
|
||||
phar.require_hash=0
|
||||
phar.extract_list="phar_test.phar=test"
|
||||
--FILE--
|
||||
<?php
|
||||
var_dump(Phar::getExtractList());
|
||||
ini_set('phar.extract_list', 'phar_test.phar='.dirname(__FILE__));
|
||||
var_dump(Phar::getExtractList());
|
||||
|
||||
$pname = 'phar://phar_test.phar';
|
||||
|
||||
var_dump(file_get_contents($pname . '/extracted.inc'));
|
||||
|
||||
include $pname . '/extracted.inc';
|
||||
|
||||
?>
|
||||
===DONE===
|
||||
--EXPECTF--
|
||||
array(1) {
|
||||
["phar_test.phar"]=>
|
||||
string(4) "test"
|
||||
}
|
||||
array(1) {
|
||||
["phar_test.phar"]=>
|
||||
string(%d) "%s"
|
||||
}
|
||||
string(29) "<?php var_dump(__FILE__); ?>
|
||||
"
|
||||
string(%d) "%sextracted.inc"
|
||||
===DONE===
|
||||
@@ -1,28 +0,0 @@
|
||||
--TEST--
|
||||
Phar: test ini_set with readonly and require_hash enabled
|
||||
--SKIPIF--
|
||||
<?php if (!extension_loaded("phar")) print "skip";?>
|
||||
--INI--
|
||||
phar.require_hash=1
|
||||
phar.readonly=1
|
||||
--FILE--
|
||||
<?php
|
||||
var_dump(ini_set('phar.require_hash', 1));
|
||||
var_dump(ini_set('phar.readonly', 1));
|
||||
var_dump(ini_get('phar.require_hash'));
|
||||
var_dump(ini_get('phar.readonly'));
|
||||
var_dump(ini_set('phar.require_hash', 0));
|
||||
var_dump(ini_set('phar.readonly', 0));
|
||||
var_dump(ini_get('phar.require_hash'));
|
||||
var_dump(ini_get('phar.readonly'));
|
||||
__HALT_COMPILER();
|
||||
?>
|
||||
--EXPECT--
|
||||
string(1) "1"
|
||||
string(1) "1"
|
||||
string(1) "1"
|
||||
string(1) "1"
|
||||
string(1) "1"
|
||||
string(1) "1"
|
||||
string(1) "1"
|
||||
string(1) "1"
|
||||
@@ -1,85 +0,0 @@
|
||||
--TEST--
|
||||
Phar: test ini_set with readonly and require_hash disabled
|
||||
--SKIPIF--
|
||||
<?php if (!extension_loaded("phar")) print "skip";?>
|
||||
--INI--
|
||||
phar.require_hash=0
|
||||
phar.readonly=0
|
||||
--FILE--
|
||||
<?php
|
||||
var_dump(ini_set('phar.require_hash', 1));
|
||||
var_dump(ini_set('phar.readonly', 1));
|
||||
var_dump(ini_get('phar.require_hash'));
|
||||
var_dump(ini_get('phar.readonly'));
|
||||
ini_set('phar.require_hash', 0);
|
||||
ini_set('phar.readonly', 0);
|
||||
var_dump(Phar::canWrite());
|
||||
?>
|
||||
yes
|
||||
<?php
|
||||
var_dump(ini_set('phar.require_hash', 'yes'));
|
||||
var_dump(ini_set('phar.readonly', 'yes'));
|
||||
var_dump(ini_get('phar.require_hash'));
|
||||
var_dump(ini_get('phar.readonly'));
|
||||
var_dump(Phar::canWrite());
|
||||
ini_set('phar.require_hash', 0);
|
||||
ini_set('phar.readonly', 0);
|
||||
?>
|
||||
on
|
||||
<?php
|
||||
var_dump(ini_set('phar.require_hash', 'on'));
|
||||
var_dump(ini_set('phar.readonly', 'on'));
|
||||
var_dump(ini_get('phar.require_hash'));
|
||||
var_dump(ini_get('phar.readonly'));
|
||||
var_dump(Phar::canWrite());
|
||||
ini_set('phar.require_hash', 0);
|
||||
ini_set('phar.readonly', 0);
|
||||
?>
|
||||
true
|
||||
<?php
|
||||
var_dump(ini_set('phar.require_hash', 'true'));
|
||||
var_dump(ini_set('phar.readonly', 'true'));
|
||||
var_dump(Phar::canWrite());
|
||||
var_dump(ini_get('phar.require_hash'));
|
||||
var_dump(ini_get('phar.readonly'));
|
||||
?>
|
||||
0
|
||||
<?php
|
||||
var_dump(ini_set('phar.require_hash', 0));
|
||||
var_dump(ini_set('phar.readonly', 0));
|
||||
var_dump(Phar::canWrite());
|
||||
var_dump(ini_get('phar.require_hash'));
|
||||
var_dump(ini_get('phar.readonly'));
|
||||
?>
|
||||
===DONE===
|
||||
--EXPECT--
|
||||
string(1) "0"
|
||||
string(1) "0"
|
||||
string(1) "1"
|
||||
string(1) "1"
|
||||
bool(true)
|
||||
yes
|
||||
string(1) "0"
|
||||
string(1) "0"
|
||||
string(3) "yes"
|
||||
string(3) "yes"
|
||||
bool(false)
|
||||
on
|
||||
string(1) "0"
|
||||
string(1) "0"
|
||||
string(2) "on"
|
||||
string(2) "on"
|
||||
bool(false)
|
||||
true
|
||||
string(1) "0"
|
||||
string(1) "0"
|
||||
bool(false)
|
||||
string(4) "true"
|
||||
string(4) "true"
|
||||
0
|
||||
string(4) "true"
|
||||
string(4) "true"
|
||||
bool(true)
|
||||
string(1) "0"
|
||||
string(1) "0"
|
||||
===DONE===
|
||||
@@ -1,61 +0,0 @@
|
||||
--TEST--
|
||||
Phar with meta-data (read)
|
||||
--SKIPIF--
|
||||
<?php if (!extension_loaded("phar")) print "skip";?>
|
||||
--INI--
|
||||
phar.require_hash=0
|
||||
--FILE--
|
||||
<?php
|
||||
$fname = dirname(__FILE__) . '/' . basename(__FILE__, '.php') . '.phar.php';
|
||||
$pname = 'phar://' . $fname;
|
||||
$file = "<?php __HALT_COMPILER(); ?>";
|
||||
|
||||
$files = array();
|
||||
$files['a'] = array('cont' => 'a');
|
||||
$files['b'] = array('cont' => 'b', 'meta' => 'hi there');
|
||||
$files['c'] = array('cont' => 'c', 'meta' => array('hi', 'there'));
|
||||
$files['d'] = array('cont' => 'd', 'meta' => array('hi'=>'there','foo'=>'bar'));
|
||||
include 'phar_test.inc';
|
||||
|
||||
foreach($files as $name => $cont) {
|
||||
var_dump(file_get_contents($pname.'/'.$name));
|
||||
}
|
||||
|
||||
$phar = new Phar($fname);
|
||||
foreach($files as $name => $cont) {
|
||||
var_dump($phar[$name]->getMetadata());
|
||||
}
|
||||
|
||||
unset($phar);
|
||||
|
||||
foreach($files as $name => $cont) {
|
||||
var_dump(file_get_contents($pname.'/'.$name));
|
||||
}
|
||||
?>
|
||||
===DONE===
|
||||
--CLEAN--
|
||||
<?php unlink(dirname(__FILE__) . '/' . basename(__FILE__, '.clean.php') . '.phar.php'); ?>
|
||||
--EXPECT--
|
||||
string(1) "a"
|
||||
string(1) "b"
|
||||
string(1) "c"
|
||||
string(1) "d"
|
||||
NULL
|
||||
string(8) "hi there"
|
||||
array(2) {
|
||||
[0]=>
|
||||
string(2) "hi"
|
||||
[1]=>
|
||||
string(5) "there"
|
||||
}
|
||||
array(2) {
|
||||
["hi"]=>
|
||||
string(5) "there"
|
||||
["foo"]=>
|
||||
string(3) "bar"
|
||||
}
|
||||
string(1) "a"
|
||||
string(1) "b"
|
||||
string(1) "c"
|
||||
string(1) "d"
|
||||
===DONE===
|
||||
@@ -1,61 +0,0 @@
|
||||
--TEST--
|
||||
Phar with meta-data (write)
|
||||
--SKIPIF--
|
||||
<?php if (!extension_loaded("phar")) print "skip";?>
|
||||
--INI--
|
||||
phar.require_hash=0
|
||||
--FILE--
|
||||
<?php
|
||||
$fname = dirname(__FILE__) . '/' . basename(__FILE__, '.php') . '.phar.php';
|
||||
$pname = 'phar://' . $fname;
|
||||
$file = "<?php __HALT_COMPILER(); ?>";
|
||||
|
||||
$files = array();
|
||||
$files['a'] = array('cont' => 'a');
|
||||
$files['b'] = array('cont' => 'b', 'meta' => 'hi there');
|
||||
$files['c'] = array('cont' => 'c', 'meta' => array('hi', 'there'));
|
||||
$files['d'] = array('cont' => 'd', 'meta' => array('hi'=>'there','foo'=>'bar'));
|
||||
include 'phar_test.inc';
|
||||
|
||||
foreach($files as $name => $cont) {
|
||||
var_dump(file_get_contents($pname.'/'.$name));
|
||||
}
|
||||
|
||||
$phar = new Phar($fname);
|
||||
$phar['a']->setMetadata(42);
|
||||
$phar['b']->setMetadata(NULL);
|
||||
$phar['c']->setMetadata(array(25, 'foo'=>'bar'));
|
||||
$phar['d']->setMetadata(true);
|
||||
|
||||
foreach($files as $name => $cont) {
|
||||
var_dump($phar[$name]->getMetadata());
|
||||
}
|
||||
|
||||
unset($phar);
|
||||
|
||||
foreach($files as $name => $cont) {
|
||||
var_dump(file_get_contents($pname.'/'.$name));
|
||||
}
|
||||
?>
|
||||
===DONE===
|
||||
--CLEAN--
|
||||
<?php unlink(dirname(__FILE__) . '/' . basename(__FILE__, '.clean.php') . '.phar.php'); ?>
|
||||
--EXPECT--
|
||||
string(1) "a"
|
||||
string(1) "b"
|
||||
string(1) "c"
|
||||
string(1) "d"
|
||||
int(42)
|
||||
NULL
|
||||
array(2) {
|
||||
[0]=>
|
||||
int(25)
|
||||
["foo"]=>
|
||||
string(3) "bar"
|
||||
}
|
||||
bool(true)
|
||||
string(1) "a"
|
||||
string(1) "b"
|
||||
string(1) "c"
|
||||
string(1) "d"
|
||||
===DONE===
|
||||
@@ -1,79 +0,0 @@
|
||||
--TEST--
|
||||
Phar with meta-data (write)
|
||||
--SKIPIF--
|
||||
<?php if (!extension_loaded("phar")) print "skip";?>
|
||||
--INI--
|
||||
phar.require_hash=0
|
||||
phar.readonly=0
|
||||
--FILE--
|
||||
<?php
|
||||
$fname = dirname(__FILE__) . '/' . basename(__FILE__, '.php') . '.phar.php';
|
||||
$pname = 'phar://' . $fname;
|
||||
$file = "<?php __HALT_COMPILER(); ?>";
|
||||
|
||||
$files = array();
|
||||
$files['a'] = array('cont' => 'a');
|
||||
$files['b'] = array('cont' => 'b', 'meta' => 'hi there');
|
||||
$files['c'] = array('cont' => 'c', 'meta' => array('hi', 'there'));
|
||||
$files['d'] = array('cont' => 'd', 'meta' => array('hi'=>'there','foo'=>'bar'));
|
||||
include 'phar_test.inc';
|
||||
|
||||
foreach($files as $name => $cont) {
|
||||
var_dump(file_get_contents($pname.'/'.$name));
|
||||
}
|
||||
|
||||
$phar = new Phar($fname);
|
||||
$phar->startBuffering();
|
||||
$phar['a']->setMetadata(42);
|
||||
$phar['b']->setMetadata(NULL);
|
||||
$phar['c']->setMetadata(array(25, 'foo'=>'bar'));
|
||||
$phar['d']->setMetadata(true);
|
||||
|
||||
foreach($files as $name => $cont) {
|
||||
var_dump($phar[$name]->getMetadata());
|
||||
}
|
||||
$phar->stopBuffering();
|
||||
|
||||
unset($phar);
|
||||
|
||||
$phar = new Phar($fname);
|
||||
|
||||
foreach($files as $name => $cont) {
|
||||
var_dump(file_get_contents($pname.'/'.$name));
|
||||
}
|
||||
|
||||
foreach($files as $name => $cont) {
|
||||
var_dump($phar[$name]->getMetadata());
|
||||
}
|
||||
?>
|
||||
===DONE===
|
||||
--CLEAN--
|
||||
<?php unlink(dirname(__FILE__) . '/' . basename(__FILE__, '.clean.php') . '.phar.php'); ?>
|
||||
--EXPECT--
|
||||
string(1) "a"
|
||||
string(1) "b"
|
||||
string(1) "c"
|
||||
string(1) "d"
|
||||
int(42)
|
||||
NULL
|
||||
array(2) {
|
||||
[0]=>
|
||||
int(25)
|
||||
["foo"]=>
|
||||
string(3) "bar"
|
||||
}
|
||||
bool(true)
|
||||
string(1) "a"
|
||||
string(1) "b"
|
||||
string(1) "c"
|
||||
string(1) "d"
|
||||
int(42)
|
||||
NULL
|
||||
array(2) {
|
||||
[0]=>
|
||||
int(25)
|
||||
["foo"]=>
|
||||
string(3) "bar"
|
||||
}
|
||||
bool(true)
|
||||
===DONE===
|
||||
@@ -1,31 +0,0 @@
|
||||
--TEST--
|
||||
Phar: fopen a .phar for writing (existing file)
|
||||
--SKIPIF--
|
||||
<?php if (!extension_loaded("phar")) print "skip"; ?>
|
||||
--INI--
|
||||
phar.readonly=0
|
||||
phar.require_hash=0
|
||||
--FILE--
|
||||
<?php
|
||||
$fname = dirname(__FILE__) . '/' . basename(__FILE__, '.php') . '.phar.php';
|
||||
$pname = 'phar://' . $fname;
|
||||
$file = "<?php __HALT_COMPILER(); ?>";
|
||||
|
||||
$files = array();
|
||||
$files['a.php'] = '<?php echo "This is a\n"; ?>';
|
||||
$files['b.php'] = '<?php echo "This is b\n"; ?>';
|
||||
$files['b/c.php'] = '<?php echo "This is b/c\n"; ?>';
|
||||
include 'phar_test.inc';
|
||||
|
||||
$fp = fopen($pname . '/b/c.php', 'wb');
|
||||
fwrite($fp, 'extra');
|
||||
fclose($fp);
|
||||
include $pname . '/b/c.php';
|
||||
?>
|
||||
|
||||
===DONE===
|
||||
--CLEAN--
|
||||
<?php unlink(dirname(__FILE__) . '/' . basename(__FILE__, '.clean.php') . '.phar.php'); ?>
|
||||
--EXPECT--
|
||||
extra
|
||||
===DONE===
|
||||
Loaded 100 of 154 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user