如何使用PHP获取客户端IP地址?
我想记录通过他/她的IP地址登录我网站的用户.
我很难理解shell_exec()和exec()... 之间的区别
我一直习惯于exec()执行服务器端命令,我shell_exec()什么时候使用?
是否shell_exec()只是一个速记exec()?参数较少似乎是一样的.
可以通过三个PHP函数运行外部命令
system();
exec();
shell_exec();
Run Code Online (Sandbox Code Playgroud)
但他们的区别是什么?尽管它们具体应用,但在大多数情况下,可以同样使用.我很想知道哪些是可以同样使用的首选.例如,对于解压缩文件或压缩文件夹(使用tar命令),哪一个是首选(可能从性能的角度来看)?
更新:在另一个问题中,我发现了一个非常有用的链接,描述了这些功能的不同方面.我在这里分享链接,因为其他人可能会用来更好地了解安全问题和其他方面.
有人请告诉我.我想知道之间的不同exec(),shell_exec,system()和passthru()功能?
我从php.net搜索无法得到我需要的答案.
我正在使用Windows XP.我可以通过调用自动执行ssh会话的TCL脚本,通过浏览器成功运行system()命令.我还从脚本中返回一个值.但问题是脚本会在浏览器中转储整个ssh会话.
我的php脚本看起来像:
$ lastline = system('"C:\ tcl\bin\tclsh.exe"\ path to file\filename.tcl'.$ username.''.$ pass,$ val);
filename.tcl:
spawn plink -ssh $ user @ $ host
expect"assword:"
send"$ pass\r \n"
expect"\ prompt:/ - >"
set $ return_value [string compare /..string../ $ expect_out(buffer)]
/...一些代码......这样运行正常/
退出$ return_value
一切运行正常,我得到正确的$ return_value,但php文件打印在我的浏览器中执行整个ssh会话的结果,如下所示:
使用用户名"admin".admin@10.135.25.150的密码:===/*some text*/===\prompt:/ - > .../some text/
我想阻止system()函数在我的浏览器中打印这个
我已经使用了shell_exec()函数,但是它返回了整个ssh会话结果(我已经在tcl脚本中解析并获得了一个精确的值来返回到php脚本)有没有办法,我可以不使用shell_exec()而是使用system()代替
提前致谢
操作系统:Linux.
WHM,cpanel使用.
PHP 5.3.2(cli)(内置:2010年6月11日02:25:31)版权所有(c)1997-2010 PHP Group Zend Engine v2.3.0,版权所有(c)1998-2010 Zend Technologies
<?php
exec("php xyz.php");
?>
Run Code Online (Sandbox Code Playgroud)
开始无数次地调用xyz.php.服务器在一段时间后挂起.
从控制台调用'php xyz.php'工作正常.
我正在尝试使用以下ExecTask在我的构建文件中实现一个像样的随机字符串生成器 :
<exec command="cat /dev/urandom | tr -cd '[:alnum:]' | fold -w30 | head -n1" returnProperty="random" />
Run Code Online (Sandbox Code Playgroud)
虽然这在命令行上运行时工作正常,但是当我尝试从Phing调用它时,它会导致我的构建脚本挂起.我尝试了各种逃脱模式无济于事.我究竟做错了什么?
我正在尝试使用pngquant压缩算法使用WAMP动态压缩PNG图像.他们提供了一个PHP示例(我认为)应该使用Windows的命令行二进制文件,我已将其放在system32文件夹中,我可以从命令行的任何位置访问它.
我已经采取了他们的例子,并将问题追溯到了这一$compressed_png_content = shell_exec("pngquant --quality=$min_quality-$max_quality - < ".escapeshellarg( $path_to_png_file));行.我已将其简化为var_dump(shell_exec('pngquant - < test.png'));但它只输出前5个字符,即使passthru('pngquant - < test.png');似乎将正确的输出作为字符串发送给用户.exec('pngquant - < test.png',$output); var_dump($output);似乎也捕获了正确的输出但是以数组的形式,我真的不知道如何转换回图像文件.我想捕获变量中的输出,以便我可以使用进一步的压缩算法和操作,并将其作为可下载文件发送给用户.
我已经读过system()vs exec()vs shell_exec()vs passthru()vs proc_open()vs popen()之间的差异.Shell_exec()似乎是正确的选择,但它在php.net上说shell_exec()输出一个字符串.这可能是个问题吗?如何正确捕获pngquant - < test.png变量的命令输出?
我在Windows机器上使用PHP.我也使用Dev C++.我可以使用以下命令在CMD上完美地编译.cpp文件:
g++ hello.cpp -O3 -o hello.exe
Run Code Online (Sandbox Code Playgroud)
现在我要做的是使用php system()函数运行相同的命令,所以它看起来像这样:
system("g ++ c:\ wamp\www\grader\hello.cpp -O3 -o C:\ wamp\www\grader\hello.exe");
但它没有编译.我迷路了,请告诉我我错过了什么?
我也抬头看了这个问题,这正是我需要的,但我找不到一个有用的解决方案,我的情况:
我有以下代码
function generate_pdf() {
$fdf_data_strings = $this->get_hash_for_pdf();
#$fdf_data_names = array('49a' => "yes");
$fdf_data_names = array();
$fields_hidden = array();
$fields_readonly = array();
$hud_pdf = ABSPATH.'../pdf/HUD3.pdf';
$fdf= forge_fdf( '',
$fdf_data_strings,
$fdf_data_names,
$fields_hidden,
$fields_readonly );
/* echo "<pre>";
print_r($fdf);
echo "</pre>";
die('');
*/
$fdf_fn= tempnam( '.', 'fdf' );
$fp= fopen( $fdf_fn, 'w' );
if( $fp ) {
fwrite( $fp, $fdf );
//$data=fread( $fp, $fdf );
// echo $data;
fclose( $fp );
header( 'Content-type: application/pdf' );
header( 'Content-disposition: attachment; filename=settlement.pdf' ); // prompt to …Run Code Online (Sandbox Code Playgroud) 我试图通过PHP获取数据库的mysqldump,我只能通过这种方式通过命令行进行数据库转储.
d:
cd "d:\wamp\bin\mysql\mysql5.5.24\bin"
mysqldump.exe
mysqldump --user=user --password=password --host=localhost db_name > "D:\dump\test.sql"
Run Code Online (Sandbox Code Playgroud)
当试图以这种方式从php执行此命令时,我得到一个空的转储文件.
$cmd = 'd: cd "d:/wamp/bin/mysql/mysql5.5.24/bin"mysqldump.exe>mysqldump --user=user --password=password --host=localhost db_name > "D:\dump\test.sql"';
exec($cmd);
Run Code Online (Sandbox Code Playgroud)
或者这样
$cmd = 'd:/wamp/bin/mysql/mysql5.5.24/bin>mysqldump.exe>mysqldump --user=user --password=password --host=localhost db_name > D:\dump\test.sql';
exec($cmd);
Run Code Online (Sandbox Code Playgroud)
或者这样
$cmd = 'd:/wamp/bin/mysql/mysql5.5.24/bin>mysqldump --user=user --password=password --host=localhost db_name > D:\dump\test.sql';
exec($cmd);
Run Code Online (Sandbox Code Playgroud)
我只得到空的转储文件.我已经经历了很多的问题在这里一样了这个,而这和很多,但没有该解决方案为我工作.
请查看并建议任何可行的方法.
谢谢.