对于PHP来说,我几乎是一个新手,并且有一个我需要解决的问题,对于一个必须明天上线的网站。
基本上我一直在使用名为'uploadify'的javascript上传脚本,该脚本有一个上传文件夹的选项,该文件已添加到脚本中:
'folder' : '/songs/<?php echo $_SESSION["name"];?>',
我添加了php echo以从PHP登录名返回用户名,因此它被添加到上传文件夹的路径中(每个用户都有自己的子文件夹以便上传到)。
使用新版本的uploadify脚本,文件夹选项已移至单独的PHP文件中,现在它位于以下格式:
$targetFolder = '/songs/';
我需要找到一种方法来将username变量添加到此行。我已经尝试过以各种方式使用echo,然后用Google搜索,但它让我很难过,很简单。
如果有人能告诉我如何构建这条线,我将非常感激。时间至关重要,正如他们所说的......
谢谢,
尼克
我认为我会包含所有涉及的案例,这说明了为什么会话var对uploadify.php不可用。
首先在index.php页面的顶部有这个:
<?
require("log.php");
?>
触发log.php:
<?
session_name("MyLogin");
session_start();
if($_GET['action'] == "login") {
$conn = mysql_connect("","",""); // your MySQL connection data
$db = mysql_select_db(""); //put your database name in here
$name = $_POST['user'];
$q_user = mysql_query("SELECT * FROM USERS WHERE login='$name'");
if(mysql_num_rows($q_user) == 1) {
$query = mysql_query("SELECT * FROM USERS WHERE login='$name'");
$data = mysql_fetch_array($query);
if($_POST['pwd'] == $data['password']) {
$_SESSION["name"] = $name;
header("Location: http://monthlymixup.com/index.php"); // success page. put the URL you want
exit;
} else {
header("Location: login.php?login=failed&cause=".urlencode('Wrong Password'));
exit;
}
} else {
header("Location: login.php?login=failed&cause=".urlencode('Invalid User'));
exit;
}
}
// if the session is not registered
if(session_is_registered("name") == false) {
header("Location: login.php");
}
?>
(我已从此删除了MySql信息)
然后调用login.php,它在顶部有这个php(后跟表单的html):
<?
session_name("MyLogin");
session_start();
session_destroy();
if($_GET['login'] == "failed") {
print $_GET['cause'];
}
?>
其中包括session_destroy();.我认为这可能导致问题,但我删除了这一行,并且会话var没有传递给uploadify.php(为什么它可以用于index.php它在这里被销毁?)。 uploadify.php目前看起来像这样:
<?php
session_start()
print_r($_SESSION);
$targetFolder = '/songs/' . $_SESSION['name']; // Relative to the root
if (!empty($_FILES)) {
$tempFile = $_FILES['Filedata']['tmp_name'];
$targetPath = $_SERVER['DOCUMENT_ROOT'] . $targetFolder;
$targetFile = rtrim($targetPath,'/') .'/'. $_FILES['Filedata']['name'];
// Validate the file type
$fileTypes = array('m4a','mp3','flac','ogg'); // File extensions
$fileParts = pathinfo($_FILES['Filedata']['name']);
if (in_array($fileParts['extension'],$fileTypes)) {
move_uploaded_file($tempFile,$targetFile);
echo '1';
} else {
echo 'Invalid file type.';
}
}
?>
在jquery.uploadify.js中引用uploadify.php。我认为这些都是相关的:
uploader : 'uploadify.php',
upload_url : settings.uploader,
case 'uploader':
swfuploadify.setUploadURL(settingValue);
答案 0 :(得分:1)
这可能是这么简单吗?
$targetFolder = '/songs/' . $_SESSION['name'];
答案 1 :(得分:1)
假设您仍然使用会话var ...
$targetFolder = '/songs/' . $_SESSION['name'];
答案 2 :(得分:0)
$targetFolder = "/songs/{$_SESSION['name']}";
编辑:您的问题是session_name
。如果您曾使用它(通常不需要),“您需要为每个请求调用session_name()(并且在调用session_start()或session_register()之前)。”
答案 3 :(得分:0)
只需使用连接....
$targetFolder = '/songs/' . $_SESSION['name'];
如果您需要一个尾随斜杠(因为它之前没有它我正常工作,我不认为你这样做),请使用:
$targetFolder = '/songs/' . $_SESSION['name'] . '/';
当你在PHP脚本中时,将变量添加到另一个变量的字符串是微不足道的 - 使用“。”点运算符,您可以连接或连接字符串。
我还会检查会话名称变量是否存在,如果不存在,可能会取消或设置默认值。也许
if(!isset($_SESSION['name']))
do { $_SESSION['name'] = microtime(); } while(!file_exists('songs/'.$_SESSION['name']));
这将主动为该文件找到一个新文件夹,它不会覆盖现有文件夹。
如上所述,另一种方法是使用双引号和“{}”来实现相同的结果。您会发现使用单引号的双引号可能会非常慢,因为字符串解析器将检查您是否包含任何变量并将它们“展开”到它们的值。两种语法都可以接受。
以下是我通常用来传输会话ID
的内容$('#file_upload').uploadify({
'uploader': '/prototype/site/assets/template/swf/uploadify.swf',
'script': '/prototype/jobs/filemanager/upload',
'cancelImg': '/prototype/site/assets/template/images/cancel.png',
'auto': true,
'multi': false,
'fileDesc': 'Portable Document Format *.pdf',
'fileExt': '*.pdf',
'buttonText':'Upload',
'onComplete': load_list,
'scriptAccess':'always',
'checkScript':'/jobs/filemanager/check',
'scriptData': {'session_id':'<?php echo session_id()?>'},
'queueID':'queue'
});
查看脚本数据?我基本上输出会话ID,然后将其传递给uploadify.php(我的例子不使用uploadify.php,它包含在一个类中,但它是一样的)
答案 4 :(得分:-1)
您正在寻找concatenation operator ('.'):
$targetFolder = '/songs/'.$_SESSION["name"].'/';
答案 5 :(得分:-2)
只要用户名存储在会话变量中,请确保$ targetFolder所在的脚本启动会话(session_start())并将该行更改为以下内容:
$targetFolder= "/songs/".$_SESSION['name'].'/';
如果$ _SESSION ['name'] =“foo”你的路径现在是/ songs / foo /.