Today we will learn how to develop an extension to send faxes with only a line of code. You need efax installed and configured (just edit /usr/bin/fax).
Add this lines to /etc/printcap file:
fax: :lp=/dev/null: :sd=/var/spool/fax: :if=/usr/bin/faxlpr:Now we can write the module:
efax.c
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
#include "php.h"
#include "efax.h"
ZEND_FUNCTION(send_fax);
PHP_MINFO_FUNCTION(efaxmod);
static function_entry efax_functions[] = {
PHP_FE(send_fax, NULL)
{NULL, NULL, NULL}
};
zend_module_entry efax_module_entry = {
#if ZEND_MODULE_API_NO >= 20010901
STANDARD_MODULE_HEADER,
#endif
PHP_EFAX_EXTNAME,
efax_functions,
NULL,
NULL,
NULL,
NULL,
NULL,
#if ZEND_MODULE_API_NO >= 20010901
PHP_EFAX_VERSION,
#endif
STANDARD_MODULE_PROPERTIES
};
#ifdef COMPILE_DL_EFAX
ZEND_GET_MODULE(efax)
#endif
PHP_MINFO_FUNCTION(efaxmod) {
php_info_print_table_start();
php_info_print_table_row(2, "Efax Extension", "Hazent Systems");
php_info_print_table_end();
}
PHP_FUNCTION(send_fax)
{
char *name, *number;
//int name_len, number_len;
int ret;
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sl", &name, &number) == FAILURE)
return;
char *cmd[] = { "lpr", "-Pfax" , "-J", number, name,(char *)0 };
// FIXME: getenv
char *env[] = { "HOME=/var/www", "LOGNAME=www-data", (char *)0 };
ret = execve ("/usr/bin/lpr", cmd, env);
return ret;
}
efax.h
#ifndef PHP_EFAX_H #define PHP_EFAX_H 1 #define PHP_EFAX_VERSION "1.0" #define PHP_EFAX_EXTNAME "eFax" PHP_FUNCTION(send_fax); extern zend_module_entry efax_module_entry; #define phpext_hello_ptr &efax_module_entry #endif
config.m4
PHP_ARG_ENABLE(efax, whether to enable eFax support, [ --enable-efax Enable eFax support]) if test "$PHP_EFAX" = "yes"; then AC_DEFINE(HAVE_EFAX, 1, [Whether you have eFax]) PHP_NEW_EXTENSION(efax, efax.c, $ext_shared) fiTo compile it type:
bash$ phpice && ./configure && makeIf you want to install it type:
bash$ make installor, just load it from php during the execution:
dl("efax.so");
send_fax("666666666","fichero.txt");
send_fax("667777666","fichero.pdf");
send_fax("688888866","fichero.ps");
...
You can get the source from: http://people.hazent.com/~jrp/soft/php4-efax.tgz
No comments:
Post a Comment