PDA

Просмотр полной версии : Периписать пхп скрипт на C++


Suliman36
12.12.2009, 18:55
Всем привет, мне нужно переписать пхп скрипт буквально в 15 строк на C++, чтобы его можно было скомпилить на фряхе и ано работало такжекак на пхп,тоесть результат выполнения был такойже
вот код

<?php
set_time_limit(0);
ignore_user_abort(1);
$array = file('uin.txt');
$count = count($array);
$array2 = file('pass.txt');
$count2 = count($array2);
$fp = fopen('source.txt', 'w');
flock ($fp, LOCK_EX);
for ($n2 = 0; $n2 < $count2; $n2++) {
for ($n = 0; $n < $count; $n++) {
fputs($fp, intval($array[$n]).';'.$array2[$n2]);
}
}
flock ($fp, LOCK_UN);
fclose($fp);
?>

так как я знаю тока пхп,сам немогу переписать
надеюсь тут найдутся добрые люди знающие оба языка и помогут мне...

rudvil
12.12.2009, 20:03
Всем привет, мне нужно переписать пхп скрипт буквально в 15 строк на C++, чтобы его можно было скомпилить на фряхе и ано работало такжекак на пхп,тоесть результат выполнения был такойже
вот код

<?php
set_time_limit(0);
ignore_user_abort(1);
$array = file('uin.txt');
$count = count($array);
$array2 = file('pass.txt');
$count2 = count($array2);
$fp = fopen('source.txt', 'w');
flock ($fp, LOCK_EX);
for ($n2 = 0; $n2 < $count2; $n2++) {
for ($n = 0; $n < $count; $n++) {
fputs($fp, intval($array[$n]).';'.$array2[$n2]);
}
}
flock ($fp, LOCK_UN);
fclose($fp);
?>

так как я знаю тока пхп,сам немогу переписать
надеюсь тут найдутся добрые люди знающие оба языка и помогут мне...
Ты уверен что код написан правильно?
Если в uin.txt будетusr1
usr2
usr3
и в pass.txt будетusr1pass
usr2pass
usr2pass
После выполнения скрипта в "source.txt" будетusr1;usr1pass
usr2;usr1pass
usr3;usr1pass
usr1;usr2pass
usr2;usr2pass
usr3;usr2pass
usr1;usr3pass
usr2;usr3pass
usr3;usr3pass

Suliman36
12.12.2009, 20:23
Да именнотак мне и надо,потомучто такой подход на мой взгляд лучше так как будет один пароль пробоваться ко всем номерам,потом другой ко всем и так далее, хотя можно написать 2 версии

rudvil
12.12.2009, 20:49
Вот, как на php#include <iostream>
#include <string>
#include <fstream>

int main (int argc, char* argv[]) {
std::string source, line, uin, pass;
std::ifstream uinFile("uin.txt");
std::ifstream passFile("pass.txt");
std::ofstream sourceFile("source.txt");
if (!uinFile.is_open()) {
std::cout << "Unable to open file uin.txt\n";
return 1;
}
if (!passFile.is_open()) {
std::cout << "Unable to open file pass.txt\n";
return 1;
}
if (!sourceFile.is_open()) {
std::cout << "Unable to open file source.txt\n";
return 1;
}
while (!passFile.eof()) {
line = "";
getline(passFile, pass);
while (!uinFile.eof()) {
getline(uinFile, uin);
line += uin + ";" + pass + "\n";
}
source += line;
uinFile.seekg(std::ios::beg);
}
sourceFile << source;
uinFile.close();
passFile.close();
sourceFile.close();
return 0;
}

Suliman36
13.12.2009, 00:01
Чета ано нихочет компилицо
скопировал все как ты написал, но компилятор выдает ошибки
почиму так?
Ошибки выдает чтота связанное с синтаксисом...
Может это написанно под винду, а ме нужно под FreeBSD...
Может быть есть какие различия в том как нужно писать?

rudvil
13.12.2009, 01:17
Чета ано нихочет компилицо
скопировал все как ты написал, но компилятор выдает ошибки
почиму так?
Ошибки выдает чтота связанное с синтаксисом...
Может это написанно под винду, а ме нужно под FreeBSD...
Может быть есть какие различия в том как нужно писать?
Может имеет смысл показать что конкретно пишет компилятор? тут не экстрасенсы...

Suliman36
13.12.2009, 02:09
# gcc -pthread list.c -o list
list.c:1:22: iostream.h: No such file or directory
list.c:3:21: fstream.h: No such file or directory
list.c: In function `main':
list.c:6: error: syntax error before ':' token
list.c:7: error: syntax error before ':' token
list.c:8: error: syntax error before ':' token
list.c:9: error: syntax error before ':' token
list.c:10: error: `uinFile' undeclared (first use in this function)
list.c:10: error: (Each undeclared identifier is reported only once
list.c:10: error: for each function it appears in.)
list.c:11: error: syntax error before ':' token
list.c:14: error: `passFile' undeclared (first use in this function)
list.c:15: error: syntax error before ':' token
list.c:18: error: `sourceFile' undeclared (first use in this function)
list.c:19: error: syntax error before ':' token
list.c:23: error: `line' undeclared (first use in this function)
list.c:24: error: `pass' undeclared (first use in this function)
list.c:26: error: `uin' undeclared (first use in this function)
list.c:29: error: `source' undeclared (first use in this function)
list.c:30: error: `std' undeclared (first use in this function)
list.c:30: error: syntax error before ':' token

rudvil
13.12.2009, 02:21
У меня на win mingw все компилит на ура...
Меня смущает вот чтоlist.c:1:22: iostream.h: No such file or directory
list.c:3:21: fstream.h: No such file or directory

Попробуй скомпилить мой код не изменяя его.
з.ы. мб версия компилятора старая?

Suliman36
13.12.2009, 02:38
# cat list.c


#include <iostream>
#include <string>
#include <fstream>

int main (int argc, char* argv[]) {
std::string source, line, uin, pass;
std::ifstream uinFile("uin.txt");
std::ifstream passFile("pass.txt");
std::ofstream sourceFile("source.txt");
if (!uinFile.is_open()) {
std::cout << "Unable to open file uin.txt\n";
return 1;
}
if (!passFile.is_open()) {
std::cout << "Unable to open file pass.txt\n";
return 1;
}
if (!sourceFile.is_open()) {
std::cout << "Unable to open file source.txt\n";
return 1;
}
while (!passFile.eof()) {
line = "";
getline(passFile, pass);
while (!uinFile.eof()) {
getline(uinFile, uin);
line += uin + ";" + pass + "\n";
}
source += line;
uinFile.seekg(std::ios::beg);
}
sourceFile << source;
uinFile.close();
passFile.close();
sourceFile.close();
return 0;
}


# gcc -pthread list.c -o list

list.c:1:20: iostream: No such file or directory
list.c:2:18: string: No such file or directory
list.c:3:19: fstream: No such file or directory
list.c: In function `main':
list.c:6: error: syntax error before ':' token
list.c:7: error: syntax error before ':' token
list.c:8: error: syntax error before ':' token
list.c:9: error: syntax error before ':' token
list.c:10: error: `uinFile' undeclared (first use in this function)
list.c:10: error: (Each undeclared identifier is reported only once
list.c:10: error: for each function it appears in.)
list.c:11: error: syntax error before ':' token
list.c:14: error: `passFile' undeclared (first use in this function)
list.c:15: error: syntax error before ':' token
list.c:18: error: `sourceFile' undeclared (first use in this function)
list.c:19: error: syntax error before ':' token
list.c:23: error: `line' undeclared (first use in this function)
list.c:24: error: `pass' undeclared (first use in this function)
list.c:26: error: `uin' undeclared (first use in this function)
list.c:29: error: `source' undeclared (first use in this function)
list.c:30: error: `std' undeclared (first use in this function)
list.c:30: error: syntax error before ':' token


Какая версия компилятора я даже и незнаю...

rudvil
13.12.2009, 02:43
Понятно, ты компилируешь исходник С++ в С - компиляторе.
Попробуй вместо gcc написать g++

Suliman36
13.12.2009, 02:55
Ыы все скомпилилось
я в этих делах нишарю, но читал что gcc вроде как C/C++ компилятор
большое спасибо за помошь!

Suliman36
13.12.2009, 03:46
Чета оно работает не так как запланированно

Там какбы накладывается данные друг на друга и получается совсем не то что надо, и только последняя строка записывается как надо

ошибка скорей всего в этом участке кода:

Комментарии это как я понимаю код

while (!passFile.eof()) { // цыкл до момента пока не достигнут конец файла
line = ""; // объявляен/обнуляем переменную
getline(passFile, pass); // выбираем знчение строки и присваиваем переменной
while (!uinFile.eof()) { // цыкл до момента пока не достигнут конец файла
getline(uinFile, uin); // выбираем знчение строки и присваиваем переменной
line += uin + ";" + pass + "\n"; дописываем значение переменной
}
source += line; дописываем значение
uinFile.seekg(std::ios::beg); сдвиг указателя
}

если я хоть нимного понял этот код, то пойдее нужно так?

#include <iostream>
#include <string>
#include <fstream>

int main (int argc, char* argv[]) {
std::string source, uin, pass;
std::ifstream uinFile("uin.txt");
std::ifstream passFile("pass.txt");
std::ofstream sourceFile("source.txt");
if (!uinFile.is_open()) {
std::cout << "Unable to open file uin.txt\n";
return 1;
}
if (!passFile.is_open()) {
std::cout << "Unable to open file pass.txt\n";
return 1;
}
if (!sourceFile.is_open()) {
std::cout << "Unable to open file source.txt\n";
return 1;
}
while (!passFile.eof()) {
getline(passFile, pass);
while (!uinFile.eof()) {
getline(uinFile, uin);
source += uin + ";" + pass + "\n";
uinFile.seekg(std::ios::beg);
}
passFile.seekg(std::ios::beg);
}
sourceFile << source;
uinFile.close();
passFile.close();
sourceFile.close();
return 0;
}

Suliman36
13.12.2009, 16:14
Актуально!
Подскажите правильный ли тот код, который в последнем сообщении, я просто низнаком с этим языком и подправил методом догадки и похожести функций с пхп...
Компилить и проверять без одобрения нинхота, боюсь за последствия если чета нитак...

rudvil
13.12.2009, 17:37
Скомпилил, вот результат:
[uin.txt]user1
user2
user3
[pass.txt]pass1
pass2
pass3
pass4
pass5
[source.txt]user1;pass1
user2;pass1
user3;pass1
user1;pass2
user2;pass2
user3;pass2
user1;pass3
user2;pass3
user3;pass3
user1;pass4
user2;pass4
user3;pass4
user1;pass5
user2;pass5
user3;pass5
Если не так, то как?

Suliman36
13.12.2009, 17:49
У меня тот код что дал ты не так робит,вопервых он берет тока первъй пароль,номера берет все но он накладывает на номер пароль,и только последняя строка записывается как нужно,почему я низнаю,а тот код что
я дал вобще ничего не записывает в фаил

rudvil
13.12.2009, 17:55
Приведи пример нескольких строк из твоего uin.txt и pass.txt

Suliman36
13.12.2009, 18:49
Файл uin.txt

100184
100680
100682
100692
101158

файл pass.txt

oksnyudn
djosmnuf
26348256
3hd8j39f
d9j37fnh

в результате выполнения файл source.txt

;oksnyudn
;oksnyudn
;oksnyudn
;oksnyudn
101158;oksnyudn

rudvil
13.12.2009, 19:13
Исправил#include <iostream>
#include <sstream>
#include <string>
#include <fstream>

int main (int argc, char* argv[]) {
std::string source, line, uin, pass;
std::ifstream uinFile("uin.txt");
std::ifstream passFile("pass.txt");
std::ofstream sourceFile("source.txt");
if (!uinFile.is_open()) {
std::cout << "Unable to open file uin.txt\n";
return 1;
}
if (!passFile.is_open()) {
std::cout << "Unable to open file pass.txt\n";
return 1;
}
if (!sourceFile.is_open()) {
std::cout << "Unable to open file source.txt\n";
return 1;
}
while (!passFile.eof()) {
line = "";
getline(passFile, pass);
if (pass == "")
continue;
while (!uinFile.eof()) {
getline(uinFile, uin);
if (uin == "")
continue;
line += uin + ";" + pass + "\n";
}
source += line;
uinFile.seekg(std::ios::beg);
}
sourceFile << source;
uinFile.close();
passFile.close();
sourceFile.close();
return 0;
}

Suliman36
13.12.2009, 20:05
Ничего не изменилось...
Ладн спасибо за помошь, наверно придется пользовоться проверенным пхп