הוסטס - פורום אחסון האתרים הגדול בישראל

הוסטס - פורום אחסון האתרים הגדול בישראל (https://hosts.co.il/forums/index.php)
-   פורום תיכנות (https://hosts.co.il/forums/forumdisplay.php?f=14)
-   -   בעיה ב-session או בפונקציה? (https://hosts.co.il/forums/showthread.php?t=72287)

Jonathan Zeierman 27-02-09 05:17

בעיה ב-session או בפונקציה?
 
שלום לכולם.
אני מנסה לפתח מין פאנל כזה שמתחבר לשרת מרוחק ויוצר תיקייה עם הפונקציה SSH2.
הצלחתי לעשות את זה אבל אני רוצה לעשות שכאשר התחברנו בהצלחה המשתמש כביכול מועבר לדף ששם הוא בוחר מה להתקין [הצלחתי לעשות את זה] אך כשהוא מגיע ליצירת התיקייה ישנה שגיאה כזו:
קוד:

Warning: ssh2_connect() expects parameter 2 to be long, string given in /home/user/domains/domain.com/public_html/ssh/ventrilo.php on line 12

Warning: ssh2_auth_password() expects parameter 1 to be resource, boolean given in /home/user/domains/domain.com/public_html/ssh/ventrilo.php on line 14

הקודים הם כאלו:
index.php
PHP קוד:

<?php
//-----------------------------------------------
// START PHP CODE
//-----------------------------------------------
//-----------------------------------------------
// הכללת קבצים מצורפים
//-----------------------------------------------
include("config.php");
include(
"session.php");
//-----------------------------------------------
// הגנה על הדף רק בעל שם משתמש וסיסמא יכול לגשת לדף
//-----------------------------------------------
if ($_SERVER["PHP_AUTH_USER"] != "root" && $_SERVER["PHP_AUTH_PASSWORD"] != "root")
{
     
header("WWW-Authenticate: Basic realm=\"Protected By Yoni!\"");
     
header("HTTP/1.0 401 Unauthorized");
     exit(
"<title>Access Denied-הגישה נדחתה</title><center><h1><font color=red>Access Denied-הגישה נדחתה</font></h1></center>");
}

if (isset(
$_POST["send"])) //אם לחצנו על הכפתור התחבר אז הוא יציג לנו את הקוד הבא
{
//-----------------------------------------------
// ביצוע התחברות לשרת המרוחק
//-----------------------------------------------
$ssh_connection=ssh2_connect("$ip""$port"); //פונקציית התחברות לשרת המרוחק

if (ssh2_auth_password($ssh_connection"$user""$pass")) //פונקציית התחברות עם שם משתמש וסיסמא
echo ('<center><p dir="rtl">ההתחברות לשרת המרוחק בוצעה בהצלחה!</p></center>');
echo (
'<meta http-equiv="Refresh" content="3; URL=install.php">');
}
//-----------------------------------------------
// END PHP CODE
//-----------------------------------------------
?>
<!-- Login To Server HTML Code START -->
<html>
<body>
<head>
<title>Connection to remote server - התחברות לשרת מרוחק</title>
<link type="text/css" rel="stylesheet" href="ssh.css"/>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1255">
</head>
<form method="post" action="?login">
<div dir="rtl" align="center">
<center>
<table border="1" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#C0C0C0" width="15%">
<tr>
<td width="40%">פורט/PORT:</td>
<td width="60%"><input name="port" size="5" value="22"><span lang="he"> בררת 
מחדל של </span>SSH</td>
</tr>
<tr>
<td width="40%">אייפי/IP:</td>
<td width="60%"><input name="ip" size="30"></td>
</tr>
<tr>
<td width="40%">שם משתמש/USER:</td>
<td width="60%"><input name="user" size="30"></td>
</tr>
<tr>
<td width="40%"><span lang="he">סיסמא/</span>PASS:</td>
<td width="60%"><input type="password" name="pass" size="30"></td>
</tr>
<tr>
<td width="100%" colspan="2">
<center>
<input type="submit" value="התחבר" name="send">
</center>
</td>
</tr>
</table>
</center>
</div>
</form>
</body>
</html>
<!-- Login To Server HTML Code END -->

config.php
PHP קוד:

<?php
//-----------------------------------------------
// START PHP CODE
//-----------------------------------------------
//-----------------------------------------------
// הגדרת הגדרות לשרת מרוחק ע"י כתיבת המשתמש
//-----------------------------------------------
$port $_POST["port"]; //פורט 22 בדרך כלל קבוע אך ניתן לשנות אותו פי הצורך
$ip $_POST["ip"]; //הגדרת אייפי לשרת המרוחק
$user $_POST["user"]; //הגדרת שם משתמש לשרת המרוחק
$pass $_POST["pass"]; //הגדרת סיסמא לשרת המרוחק
//-----------------------------------------------
// END PHP CODE
//-----------------------------------------------
?>


ventrilo.php

PHP קוד:

<?php
//-----------------------------------------------
// START PHP CODE
//-----------------------------------------------
//-----------------------------------------------
// הכללת קבצים מצורפים
//-----------------------------------------------
include("config.php");
include(
"session.php");
if (isset(
$_POST["create"])) //אם לחצנו על הכפתור הוא יציג לנו את הקוד הבא
{
$ssh_connection=ssh2_connect("$ip""$port"); //פונקציית התחברות לשרת המרוחק

if (ssh2_auth_password($ssh_connection"$user""$pass")) //פונקציית התחברות עם שם משתמש וסיסמא
$sftp ssh2_sftp($ssh_connection);
ssh2_sftp_mkdir($sftp'$_POST["new_folder"]');
}
//-----------------------------------------------
// END PHP CODE
//-----------------------------------------------
?>
<!-- Create a folder HTML Code START -->
<html>
<body>
<head>
<title>Welcome to install a ventrilo server - ברוך הבא להתקנת שרת ונטרילו</title>
<link type="text/css" rel="stylesheet" href="ssh.css"/>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1255">
</head>
<form method="post" action="?create_new_folder">
<div dir="rtl" align="center">
<center>
<table border="1" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#C0C0C0" width="15%">
<p align="center"><span lang="he"><font size="5">התקנת שרת ונטרילו</font></span></p>
<tr>
<td width="40%"><span lang="he">שם התיקייה:</span></td>
<td width="60%"><input name="new_folder" size="15"></td>
</tr>
<tr>
<td width="100%" colspan="2">
<center>
<input type="submit" value="צור" name="create">
</center>
</td>
</tr>
</table>
</center>
</div>
</form>
</body>
</html>
<!-- Create a folder HTML Code END -->

install.php
PHP קוד:

<?php
//-----------------------------------------------
// START PHP CODE
//-----------------------------------------------
//-----------------------------------------------
// הכללת קבצים מצורפים
//-----------------------------------------------    
include("config.php");
include(
"session.php");
if (isset(
$_POST['check_if_press']) && $_POST['check_if_press'] == "הרץ"//אם לחצנו על הכפתור הראה דף את דף ההרצה
$event $_POST['event']; //משתנה כללי
if ($event=='שרת ונטרילו')
{
echo (
'<center><p dir="rtl">בחרת להתקין שרת ונטרילו, הינך מועבר...</p></center>');
echo (
'<meta http-equiv="Refresh" content="3; URL=ventrilo.php">');
}
//-----------------------------------------------
// EMD PHP CODE
//-----------------------------------------------
?>
<!-- Run Server HTML Code START -->
<html>
<head>
<title>Pleas choose a installtion - אנא בחר שרת להתקנה</title>
<link type="text/css" rel="stylesheet" href="ssh.css"/>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1255">
</head>
<body>
<p align="center"><span lang="he"><font size="5">ברוך הבא, אנא בחר שרת להתקנה</font></span></p>
<form action="?run" method="post">
<p align="center" dir="rtl">
<select name="event">
    <option value="">אנא בחר שרת להרצה</option>
    <option value="שרת ונטרילו">שרת ונטרילו</option>
</select>
<br/>
<input type="submit" name="check_if_press" value="הרץ"/>
</font>
</p>
<br>
<br>
</form>
</body>
</html>
<!-- Run Server HTML Code END -->

session.php
PHP קוד:

<?php
//-----------------------------------------------
// START PHP CODE
//-----------------------------------------------
session_start();
include(
"config.php");
$_SESSION["port"] = $_POST["port"];
$_SESSION["ip"] = $_POST["ip"];
$_SESSION["user"] = $_POST["user"];
$_SESSION["pass"] = $_POST["pass"];
//-----------------------------------------------
// END PHP CODE
//-----------------------------------------------
?>

מה עושים? אני דיי נואש.
יוני.

daMn 27-02-09 12:35

שים לב בקובץ ventrilo.php שלא עטפת בסוגריים מסולסלות בif של הפונקציה ssh2_auth_password ולכן הוא בעצם לא מגיע לפונקציה ssh2_sftp_mkdir.
ועוד הערה קטנה אלייך, שאתה שולח משתנים בפונקציות אין צורך לעטוף אותם במרכאות כדוגמא "$str" אלא פשוט $str, כנ"ל לגבי משתני מערך כמו שעשית עם הPOST.

Cyeo 27-02-09 13:37

שים לב - אתה מבצע פה 2 מעברים של עמודים.
מאינדקס לINSTALL ומINSTALL לVENTRILO.
ה$_POST שעשית באינדקס יימחק במעבר בין INSTALL לוונטרילו, והעובדה שאתה שומר את הנתונים רק כשאתה מגיע לventrilo.php (כשהם כבר מחוקים) גורמת לפונקציה ssh2_connect לקבל ערכים ריקים ולפלוט שגיאות.


כאן הטעות שלך.

SniR-S 27-02-09 17:16

אגב, session_start(); אמור להיות מעל הכל !
הכי טוב זה לשים אותו נגיד ב config.php כי ברוב הדפים שולפים את הקובץ הזה (הגדרות..)

Jonathan Zeierman 27-02-09 18:04

אז איך אני שומר על הנתונים? בין המעברים?

Cyeo 27-02-09 18:31

אתה יכול לשמור אותם לקובץ TEMP ואחרי השימוש למחוק את הקובץ,
אתה יכול פשוט לעשות INCLUDE ל config.php שלך ישר באינדקס וככה הנתונים יישמרו בו במקום לעשות את האינקלוד בקובץ ventrilo.php
אבל קח בחשבון - אם אתה עושה את זה, ברגע שתעשה לאותו קובץ אינקלוד גם בventrilo.php הנתונים ייתאפסו שוב (כי אצלך הקריאה מתוך config.php זה לא רק קריאה אלא גם שמירת נתונים).

אני במקומך הייתי משתמש בSESSIONS - ברגע שבנאדם מתחבר לשמור אצלו בSESSION את הנתונים שלו - אייפי, שם משתמש, סיסמא, שם תיקיה, איזה שרת להתקין, וכל זה, ואז שולף אותם בדף שממש צריך להתקין.

שימוש בקבצים להגדרות דינמיות זה לא טוב.. תעיף תעמודים config.php ו- sessions.php ותעשה את ההגדרות בדפי קודים עצמם.


כל הזמנים הם GMT +2. הזמן כעת הוא 10:13.

מופעל באמצעות VBulletin גרסה 3.8.6
כל הזכויות שמורות ©
כל הזכויות שמורות לסולל יבוא ורשתות (1997) בע"מ