从网上看到一个关于php调c++的例子,作者写的demo漏洞百出,实在看不下去了,重新写了一下,以免误导小白,具体过程如下:
建立目录:
mkdir phpcallcpp
建立文件:
cpp.html
cpp.php
sort.cpp->sort ( 命令行: g++ sort.cpp -o sort )
cpp.html
<html>
<head>
<title>c++ 测试</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body>
<form method="post" action="cpp.php">
<div>
请输入需要排序的数组,以空格分隔:
<input type="text" name="arr" size=20/>
<input type="submit" value="确定">
</div>
</form>
</body>
</html>
cpp.php
<?php
$arr = isset($_POST['arr']) ? $_POST['arr'] : '';
if (empty($arr)) {
echo('请输入要排序的数字');
}
else{
$command = './sort ' . escapeshellcmd($arr);
$return = passthru($command);
var_dump($return);
}
sort.cpp
#include<iostream>
#include<stdlib.h>
using namespace std;
int* bubbleSort(int* arr,int len){
for (int i = 1; i < len; ++i)
{
for (int j = 0; j < len - i; ++j)
{
if (arr[j] > arr[j + 1])
{
int tmp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = tmp;
}
}
}
return arr;
}
int main(int argc,char **argv){
if (argc < 2)
{
cout << "input something" << endl;
return -1;
}
int *a = (int *)malloc((argc-1) * sizeof(int));
int *c = a;
for (int i = 1; i < argc; ++i)
{
int tmp = atoi(argv[i]);
*a = tmp;
++a;
}
int *b = bubbleSort(c,argc-1);
for (int i = 0; i < argc-1; ++i)
{
cout<<*(b+i)<<' ';
}
//free(a);
return 1;
}