在php中从私有函数中调用函数
我正在使用jQuery文件管理器。在class.uploader.php页面中有一个私有函数:在php中从私有函数中调用函数,php,Php,我正在使用jQuery文件管理器。在class.uploader.php页面中有一个私有函数: private function prepareFiles(){ $user_id = $_SESSION['user_id']; function generateRandomString($length = 10) { $characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
private function prepareFiles(){
$user_id = $_SESSION['user_id'];
function generateRandomString($length = 10) {
$characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
$charactersLength = strlen($characters);
$randomString = '';
for ($i = 0; $i < $length; $i++) {
$randomString .= $characters[rand(0, $charactersLength - 1)];
}
return $randomString;
}
$field = $this->field;
$validate = $this->validate();
if($validate){
$files = array();
$removed_files = $this->removeFiles();
for($i = 0; $i < count($field['name']); $i++){
$metas = array();
if($field['Field_Type'] == 'input'){
$tmp_name = $field['tmp_name'][$i];
}elseif($field['Field_Type'] == 'link'){
$link = $this->downloadFile($field['name'][0], false, true);
$tmp_name = $field['name'][0];
$field['name'][0] = pathinfo($field['name'][0], PATHINFO_BASENAME);
$field['type'][0] = $link['type'];
$field['size'][0] = $link['size'];
$field['error'][0] = 0;
}
$metas['extension'] = substr(strrchr(strtolower($field['name'][$i]), "."),1);
$metas['type'] = preg_split('[/]', $field['type'][$i]);
$metas['extension'] = $field['Field_Type'] == 'link' && empty($metas['extension']) ? $metas['type'][1] : $metas['extension'];
$metas['old_name'] = substr($field['name'][$i], 0, -(strlen(strrchr($field['name'][$i], $metas['extension']))+1));
$metas['size'] = $field['size'][$i];
$metas['size2'] = $this->formatSize($metas['size']);
$metas['name'] = $this->generateFileName($this->options['title'], array('name'=>$metas['old_name'], 'size'=>$metas['size'])) . (!empty($metas['extension']) ? "." . $metas['extension'] : "");
$metas['file'] = $this->options['uploadDir'] . $user_id . "_" . $metas['name'];
$metas['replaced'] = file_exists($metas['file']);
$metas['date'] = date('r');
if(!in_array($field['name'][$i], $removed_files) && $this->validate(array_merge($metas, array('index'=>$i, 'tmp'=>$tmp_name))) && $this->uploadFile($tmp_name, $metas['file'])){
if($this->options['perms']) @chmod($metas['file'], $this->options['perms']);
$custom = $this->_onUpload($metas, $this->field); if($custom && is_array($custom)) $metas = array_merge($custom, $metas);
ksort($metas);
$files[] = $metas['file'];
$this->data['data']['metas'][] = $metas;
}
}
$this->data['isSuccess'] = count($field['name']) - count($removed_files) == count($files);
$this->data['data']['files'] = $files;
if($this->data['isSuccess']) $custom = $this->_onSuccess($this->data['data']['files'], $this->data['data']['metas']);
$this->data['isComplete'] = true;
$custom = $this->_onComplete($this->data['data']['files'], $this->data['data']['metas']);
}
return $this->data;
}
并修改此行以将其包括在内:
$metas['file'] = $this->options['uploadDir'] . $user_id . "_" . $metas['name'];
$metas['replaced'] = file_exists($metas['file']);
我还想在user_id之后但在文件名之前添加这个
function generateRandomString($length = 10) {
$characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
$charactersLength = strlen($characters);
$randomString = '';
for ($i = 0; $i < $length; $i++) {
$randomString .= $characters[rand(0, $charactersLength - 1)];
}
return $randomString;
}
但是它没有“看到”$randomString我忘了调用函数,尽管Chay22的响应也会起作用。我忘了调用函数,尽管Chay22的响应也会起作用。不清楚为什么必须在函数中定义函数。或者为什么不能使用匿名函数。您似乎从未调用过
generateRandomString()
。。。你希望它能做什么?我也不确定我是否需要一个,只是需要最好的方法在文件名中添加一些随机字符,以确保没有重复的文件上传。我曾在另一个文件上传程序中使用过这个,但那个有点笨重,干扰了我表单的自然提交(它希望立即上传文件)。我将听取如何更好地实现这一点的建议。Cfreak,谢谢。我是个白痴。用generateRandomString(10)
替换$randomString
。不清楚为什么必须在函数中定义函数。或者为什么不能使用匿名函数。您似乎从未调用过generateRandomString()
。。。你希望它能做什么?我也不确定我是否需要一个,只是需要最好的方法在文件名中添加一些随机字符,以确保没有重复的文件上传。我曾在另一个文件上传程序中使用过这个,但那个有点笨重,干扰了我表单的自然提交(它希望立即上传文件)。我将听取如何更好地实现这一点的建议。Cfreak,谢谢。我是个白痴。用generateRandomString(10)
替换$randomString
。
function generateRandomString($length = 10) {
$characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
$charactersLength = strlen($characters);
$randomString = '';
for ($i = 0; $i < $length; $i++) {
$randomString .= $characters[rand(0, $charactersLength - 1)];
}
return $randomString;
}
$metas['file'] = $this->options['uploadDir'] . $user_id . "_" . $randomString . "_" . $metas['name'];
$metas['replaced'] = file_exists($metas['file']);